gpt4 book ai didi

iphone - setNeedsDisplay 仅被调用一次

转载 作者:行者123 更新时间:2023-12-03 20:25:02 33 4
gpt4 key购买 nike

在我的代码中,我想要“动画”绘制一条线的延迟,因此在向 View 添加新线后,我调用 setNeedsDisplay - 一次就可以正常工作。

在drawRect方法中,我绘制线条并调用线条的方法来增加线条长度。现在我想再次调用 setNeedsDisplay 来重新绘制线条 - 所以它会得到一个“生长”的动画..

但它只调用 setNeedsDisplay 一次,不再调用,除非我添加另一行。我还尝试调用此类中的一个方法,该方法调用 setNeedsDisplay,以确保您无法在 drawRect 内部调用它..

- (void)drawRect:(CGRect)rect {

for(GameLine *line in _lines) {

if(line.done) {
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(c, 5.0f);
CGContextSetStrokeColor(c, lineColor);

CGContextBeginPath(c);
CGContextMoveToPoint(c, line.startPos.x, line.startPos.y);
CGContextAddLineToPoint(c, line.endPos.x, line.endPos.y);
CGContextStrokePath(c);
}else {
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(c, 5.0f);
CGContextSetStrokeColor(c, delayColor);

CGContextBeginPath(c);
CGContextMoveToPoint(c, line.delayStartPos.x, line.delayStartPos.y);
CGContextAddLineToPoint(c, line.delayEndPos.x, line.delayEndPos.y);
CGContextStrokePath(c);

[line incrementDelayLine];
[self setNeedsDisplay];
}
}
}

_lines 是一个具有 GameLine 对象(非原子、保留)属性的 NSMutableArray。

最佳答案

这是预料之中的。

当您调用setNeedsDisplay时,您将 View 标记为需要重绘。好的。系统明白了。
它将在下次应用程序的主循环运行时完成

如果您确实想立即刷新 View ,请调用:

[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate: [NSDate date]];

就在setNeedsDisplay之后。

确实,apple documentation状态(强调我的):

When the actual content of your view changes, it is your responsibility to notify the system that your view needs to be redrawn. You do this by calling your view’s setNeedsDisplay or setNeedsDisplayInRect: method of the view. These methods let the system know that it should update the view during the next drawing cycle. Because it waits until the next drawing cycle to update the view, you can call these methods on multiple views to update them at the same time.

另外,请参阅以下问题:

关于iphone - setNeedsDisplay 仅被调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15820998/

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