gpt4 book ai didi

objective-c - setNeedsDisplay *总是*重画吗?

转载 作者:行者123 更新时间:2023-12-03 17:29:40 25 4
gpt4 key购买 nike

我使用 cocoa 编写了一个小的自定义 View 应用程序。后来(是的,我知道这很糟糕)我只是问自己:这对 cocoa 味也有效吗?当然 id 不能立即起作用,我必须更改类名等等。好吧,每当需要时,我都会使用 NSTimersetNeedsDisplay: 方法刷新 View 。在 cocoa 下效果很好,但在 cocoa 下绝对不行。

我无法向自己解释它,而且我实际上不知道哪些代码行可以帮助某人解决问题。也许这是计时器:

[self setMyTimer: [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(myTarget:) userInfo:nil repeats:YES]];

它的目标:

- (void) myTarget:(NSTimer *)timer {
[self setNeedsDisplay];
}

计时器每 30 毫秒调用一次,我使用 NSLog 进行了检查。

drawRect: 方法中,我实际上只是绘制了一些形状,没有执行其他任何操作。以防万一有必要调用某种 clearRect: 方法。正如我所说,在 cocoa 下它起作用了。

最佳答案

我首先使用断点或日志语句验证 drawRect: 是否正在运行。

然后,确保您的 View 确实在屏幕上。 [self superview] 的值是什么?您还应该执行类似 self.backgroundColor = [UIColor redColor]; 的操作,以便您可以看到 View 所在的位置。

仅仅因为您每 30 毫秒将 View 标记为脏并不意味着它将每 30 毫秒绘制一次。一般情况下应该可以(大约 30fps),但不能保证。 drawRect: 不应该依赖于它的调用频率。从你的问题来看,我假设你的意思是它从不绘制,而不仅仅是不按预期绘制。

关于objective-c - setNeedsDisplay *总是*重画吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7323414/

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