Ios 不该画画的时候画画。。?
在我的应用程序中,我在用户的点击和拖动上画了一个圆圈。他们敲击的地方是圆的中心,当他们拖动时,半径一直到他们的手指。绘制一个圆后,如果您在周围轻触几次(不拖动),除了下次轻触并拖动外,什么也不会发生,每次轻触都会创建圆(大小与上次创建的圆相同)。这对我来说毫无意义,因为我在Ios 不该画画的时候画画。。?,ios,objective-c,cocoa-touch,uiview,drawrect,Ios,Objective C,Cocoa Touch,Uiview,Drawrect,在我的应用程序中,我在用户的点击和拖动上画了一个圆圈。他们敲击的地方是圆的中心,当他们拖动时,半径一直到他们的手指。绘制一个圆后,如果您在周围轻触几次(不拖动),除了下次轻触并拖动外,什么也不会发生,每次轻触都会创建圆(大小与上次创建的圆相同)。这对我来说毫无意义,因为我在touchsbegind:withEvent上调用的东西只有 UITouch *touch = [touches anyObject]; center = [touch locationInView:self]; 它每次都应
touchsbegind:withEvent
上调用的东西只有
UITouch *touch = [touches anyObject];
center = [touch locationInView:self];
它每次都应该替换圆心,但当你最后移动手指时,它会在每次轻触时画一个单独的圆圈
触摸移动:
UITouch *touch = [touches anyObject];
endPoint = [touch locationInView:self];
distance = (uses center's attributes);
[self setNeedsDisplay];
接触:
[self drawBitmap];
绘图位图:
if (!CGPointEqualToPoint(center, CGPointZero) && !CGPointEqualToPoint(endPoint, CGPointZero)) {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);
if (!incrementalImage) { // first draw;
UIBezierPath *rectpath = [UIBezierPath bezierPathWithRect:self.bounds]; // enclosing bitmap by a rectangle defined by another UIBezierPath object
[[UIColor clearColor] setFill];
[rectpath fill]; // fill it
}
[incrementalImage drawAtPoint:CGPointZero];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, sW);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), r, g, b, o);
CGContextSetLineCap(context, kCGLineCapRound);
CGRect rectangle = CGRectMake(center.x - distance, center.y - distance, distance * 2, distance * 2);
CGContextAddEllipseInRect(context, rectangle);
CGContextStrokePath(context);
incrementalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
drawRect
[incrementalImage drawInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, sW);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), r, g, b, o);
CGContextSetLineCap(context, kCGLineCapRound);
CGRect rectangle = CGRectMake(center.x - distance, center.y - distance, distance * 2, distance * 2);
CGContextAddEllipseInRect(context, rectangle);
CGContextStrokePath(context);
为什么轻敲后会形成圆圈,但只有在拖动时才会出现?只能在拖动时绘制圆。。。对吗?我几乎99%确定问题出在drawBitmap上,但我不确定该怎么做来检查它是否只是点击或拖动。另外,如果问题是drawBitmap,为什么触摸Send时我看不到圆圈?只有在拖动事件中我才能看到它们编辑说得很清楚,我根本不希望在单次点击时绘制圆,只希望在拖动时绘制圆。您自己不需要调用绘制例程。当系统准备好对图形执行操作时,必须调用它们——它通过调用
drawRect:
来发出准备就绪的信号。您可以从那里运行任何您喜欢的绘图例程。使用setNeedsDisplay
向系统指示您有需要绘制的内容。这就是为什么touchesMoved:
会导致绘制圆圈。在touchesend:
中添加对setNeedsDisplay
的调用,您应该会看到您正在查找的结果。嗯,您只有[self-setNeedsDisplay]在触摸移动:
中选择code>,这意味着如果只点击,视图将不会重新绘制。您不能在touchesend:
上重新绘制。这就解释了部分行为
至于剩下的部分,我会设置断点或nslog来调试真正发生的事情。对不起,应该指定这是一个覆盖drawRect的UIView子类。不管怎样,我编辑它是为了说我根本不想在一个水龙头上画圆圈。一次点击不应该只改变中心指针的值吗?不管您希望得到什么结果,根本的问题是您不能直接从touchesend:
,只在源自drawRect:
的调用堆栈中进行绘制,而该调用堆栈不是您直接调用的。