iphone - 当 UIScrollView 滚动时,我的自定义 UI 元素不会更新

标签 iphone cocoa-touch

我有一个旋转的圆形 UI 元素,由 NSTimer 更新。我还有一个 UIScrollView ,它会在滚动时“阻止”旋转的圆圈。这是预料之中的,因为计时器和 ScrollView 都在同一个线程中。

所以我把计时器放在一个单独的线程中,它基本上工作得很好!我可以看到它正在工作,因为 NSLogs 即使在滚动时也会不断出现。

但我的问题是我的旋转圈仍然停止滚动!我怀疑重绘会停止,直到主线程运行循环的下一次迭代(?)。所以即使它的角度一直改变,它也可能不会被重新绘制......

有什么想法我可以做什么吗?谢谢!

最佳答案

滚动时,主线程的运行循环位于 UITrackingRunLoopMode 。因此,您需要做的是将计时器安排在该模式下(可能除了默认模式之外)。我相信 NSRunLoopCommonModes 包括默认模式和事件跟踪模式,因此您可以这样做:

NSTimer *timer = [NSTimer timerWithTimeInterval:0.42 target:foo selector:@selector(doSomething) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

顺便说一下,你应该在主线程上完成这一切。无需生成后台线程(除非每个计时器调用都将进行一些冗长的处理)。

关于iphone - 当 UIScrollView 滚动时,我的自定义 UI 元素不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109898/

相关文章:

ios - UIScrollView 不起作用(无法滚动)

iphone - 如何在 "Ringer & Alert Volume"级别播放声音

iphone - objective-c 静态/类方法定义 - "static"和 "+"有什么区别?

iphone - 使用 CABasicAnimation 时,CALayer 未绘制其内容

iphone - Xcode 慢得令人难以忍受(而且是谎言)。为什么?

iOS - NSJSON 序列化 : Unable to convert data to string around character

objective-c - 如何为控件分配名称并在事件方法中检索它?

iphone - 每次点击不同的图像

iphone - 使用 GameKit 在 iPhone 之间传输 CoreData 数据

iphone - [iPhone]用户无法交互的区域,为什么?