我正在学习Quartz,想要做一个这样的演示: 当您的手指在iPhone屏幕上移动时,它会以红色显示轨道。 代码如下:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
_firstPoint = [touch locationInView:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
_endPoint = [touch locationInView:self];
[self setNeedsDisplay];
_firstPoint = _endPoint;
}
然后
- (void)drawRect:(CGRect)rect {
// Drawing code.
CGContextRef _context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(_context, 1, 0, 0, 1);
CGContextMoveToPoint(_context, _firstPoint.x, _firstPoint.y);
CGContextAddLineToPoint(_context, _endPoint.x, _endPoint.y);
CGContextStrokePath(_context);
}
这里,_firstPoint和_endPoint是CGPoint记录位置。 但是,它没有显示轨道。 我不知道是什么问题。 请提供任何提示。
最后,我想咨询顾问是否适合这样的应用程序。
谢谢!
答案 0 :(得分:1)
你可以阅读本教程来弄清楚 - 可能有帮助
http://www.ifans.com/forums/showthread.php?t=132024
我认为你首先错过了CGContext BeginPath(...)
祝你好运!答案 1 :(得分:1)
关于存储构成线条的点集合的位置,它不会存储在此示例中。
EDITED
是的,要存储它们,我只需添加一个NSMutableArray。
类似
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if (!_points) _points = [[NSMutableArray array] retain];
UITouch *touch = [touches anyObject];
[_points addObject:[NSValue valueWithCGPoint:[touch locationInView:self]];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
[_points addObject:[NSValue valueWithCGPoint:[touch locationInView:self]];
[self setNeedsDisplay];
}
setNeedsDisplay将调用drawRect,即使用点和绘制方法的位置。