gpt4 book ai didi

ios - 不应该画画的时候..?

转载 作者:行者123 更新时间:2023-11-29 03:27:09 25 4
gpt4 key购买 nike

在我的应用程序中,我在用户点击并拖动时绘制了一个圆圈。他们点击的地方是圆的中心,当他们拖动时,半径达到他们的手指。一旦你画了一个圆圈,如果你点击几次(不拖动),什么也不会发生,但下次你点击并拖动时,你之前每次点击都会创建圆圈(与最后一个圆圈大小相同) 。这对我来说没有意义,因为我在 touchesBegan: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();
}

绘制矩形

    [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,为什么在touchesEnd 时看不到圆圈?只有在拖动事件中我才能看到它们。 编辑要明确的是,我根本不希望在单击时绘制圆圈,而只在拖动时绘制。

最佳答案

您不会自行调用绘图例程。当系统准备好进行绘图时,必须调用它们 - 它通过调用 drawRect: 来表明它已准备就绪。您可以从那里运行您喜欢的任何绘图例程。您可以使用 setNeedsDisplay 向系统表明您有需要在准备好后立即绘制的内容。这就是 touchesMoved: 导致绘制圆圈的原因。在 touchesEnded: 中添加对 setNeedsDisplay 的调用,您应该会看到所需的结果。

关于ios - 不应该画画的时候..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com