动画循环的NSOperation导致奇怪的滚动行为

问题描述:

我创建了一个动画循环,我作为一个操作运行,以保持我的界面的其余部分响应。几乎在那里,还有一个问题。当用户触摸结束时,我的UIScrollView似乎并不可靠。这意味着什么,例如,如果用户在滚动视图上拖动,当他们抬起手指时,滚动视图不会弹回原位并且滚动条仍然可见。仿佛手指没有离开屏幕。这需要对滚动型水龙头另一个为它捕捉到它的正确位置,并逐渐消失滚动条...动画循环的NSOperation导致奇怪的滚动行为

这是我在一个子类的NSOperation创建循环:

- (void)main 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 

    _displayLink = [[CADisplayLink displayLinkWithTarget: self selector: @selector(animationLoop:)] retain]; 
    [_displayLink setFrameInterval: 1.0f]; 
    [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode: NSRunLoopCommonModes]; 

    while (![self isCancelled]) 
    { 
     NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init]; 
     [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; 
     [loopPool drain]; 
    } 

    [_displayLink invalidate]; 

    [pool release]; 
} 

看来,虽然这操作运行事情有点怪......

没有任何人有任何想法可能怎么回事,甚至更好如何解决它......

谢谢!

我不明白你为什么要为你的需求使用如此复杂的解决方案,这看起来很经典。

在我看来,你最好使用石英基本功能来创建你的动画,并让操作系统选择何时合成渲染。你也可以使用setNeedsLayout和setNeedDisplay方法来通知渲染循环你修改了一些东西,而不是实现你自己的循环。

或者,也许你有我不明白的具体需求。