滚动UIScrollView时,我的自定义UI元素未更新

Seb*_*ian 19 iphone cocoa-touch

我有一个由NSTimer更新的旋转圆圈UI元素.我还有一个UIScrollView,可以在滚动时"阻止"旋转的圆圈.这是预料之中的,因为计时器和滚动视图都在同一个线程中.

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

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

任何想法我能做什么?谢谢!

Dan*_*son 43

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

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

顺便说一句,你应该在主线程上完成所有这些.不需要生成后台线程(除非每个定时器调用将进行一些冗长的处理).