如何使用Quartz 2d在iPhone中绘制图片

时间:2011-03-15 02:24:58

标签: ios quartz-2d

我正在学习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记录位置。 但是,它没有显示轨道。 我不知道是什么问题。 请提供任何提示。

最后,我想咨询顾问是否适合这样的应用程序。

谢谢!

2 个答案:

答案 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,即使用点和绘制方法的位置。