真的很奇怪的drawRect行为??
Posted
技术标签:
【中文标题】真的很奇怪的drawRect行为??【英文标题】:Really weird drawRect behavior?? 【发布时间】:2013-12-25 05:47:50 【问题描述】:我有一个非常简单的应用程序,用户可以在其中进行绘图。用户点击 3 次,将在这 3 次点击处绘制一个角度。在每个水龙头的位置,都有一个圆圈。下面是它的外观图片:
第一次点击时,只会创建一个圆圈,因为没有其他点可以连接(应该如此)。在第二个水龙头上,它连接了从第一个水龙头到第二个水龙头的线(应该如此)。在第三次点击时,它变得很奇怪,并从第二个圆圈的边缘(应该在中心?)连接到第三次点击。任何想法为什么会发生这种情况??
点击 3 次后:
3 次点击的另一个例子:
我是这样画的:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
UITouch *touch = [touches anyObject];
[self setOpacity:o];
if (CGPointEqualToPoint(first, CGPointZero))
first = [touch locationInView:self];
else if (!CGPointEqualToPoint(first, CGPointZero) && CGPointEqualToPoint(second, CGPointZero))
second = [touch locationInView:self];
else if (!CGPointEqualToPoint(first, CGPointZero) && !(CGPointEqualToPoint(second, CGPointZero)) && CGPointEqualToPoint(third, CGPointZero))
third = [touch locationInView:self];
else
first = [touch locationInView:self];
second = CGPointZero;
third = CGPointZero;
[self setNeedsDisplay];
- (void)drawRect:(CGRect)rect
CGContextRef context = UIGraphicsGetCurrentContext();
if (!CGPointEqualToPoint(first, CGPointZero))
CGRect rectangle = CGRectMake(first.x - 10, first.y - 10, 20, 20);
CGContextAddEllipseInRect(context, rectangle);
CGContextMoveToPoint(context, first.x, first.y);
if (!CGPointEqualToPoint(second, CGPointZero))
CGContextAddLineToPoint(context, second.x, second.y);
CGRect rectangle2 = CGRectMake(second.x - 10, second.y - 10, 20, 20);
CGContextAddEllipseInRect(context, rectangle2);
if (!CGPointEqualToPoint(third, CGPointZero))
CGContextAddLineToPoint(context, third.x, third.y);
CGRect rectangle3 = CGRectMake(third.x - 10, third.y - 10, 20, 20);
CGContextAddEllipseInRect(context, rectangle3);
CGContextStrokePath(context);
【问题讨论】:
【参考方案1】:因为在绘制第二个椭圆CGContextAddEllipseInRect(context, rectangle2);
后,您的当前位置发生了变化
试试这个:
- (void)drawRect:(CGRect)rect
CGContextRef context = UIGraphicsGetCurrentContext();
UIColor * w = [UIColor whiteColor] ;
UIColor * r = [UIColor redColor] ;
CGContextSetStrokeColorWithColor(context, w.CGColor) ;
CGContextSetFillColorWithColor(context, r.CGColor) ;
if (!CGPointEqualToPoint(first, CGPointZero))
CGRect rectangle = CGRectMake(first.x - 10, first.y - 10, 20, 20);
CGContextAddEllipseInRect(context, rectangle);
CGContextMoveToPoint(context, first.x, first.y);
if (!CGPointEqualToPoint(second, CGPointZero))
CGContextAddLineToPoint(context, second.x, second.y);
CGRect rectangle2 = CGRectMake(second.x - 10, second.y - 10, 20, 20);
CGContextAddEllipseInRect(context, rectangle2);
CGContextMoveToPoint(context, second.x, second.y);
if (!CGPointEqualToPoint(third, CGPointZero))
CGContextAddLineToPoint(context, third.x, third.y);
CGRect rectangle3 = CGRectMake(third.x - 10, third.y - 10, 20, 20);
CGContextAddEllipseInRect(context, rectangle3);
CGContextStrokePath(context);
【讨论】:
万岁!我有一种感觉,它就是那种性质的东西。另外,我省略了填充/描边颜色代码,因为发布的代码已经很长了,我认为它会被假定。非常感谢!以上是关于真的很奇怪的drawRect行为??的主要内容,如果未能解决你的问题,请参考以下文章