代码之家  ›  专栏  ›  技术社区  ›  Tricky

NSO对动画循环的操作会导致奇怪的滚动行为

  •  0
  • Tricky  · 技术社区  · 14 年前

    我创建了一个动画循环,作为一个操作运行,以保持界面的其余部分响应。虽然已经快到了,但还有一个问题。当用户触摸结束时,我的UIScrollView似乎无法可靠地恢复。这意味着,例如,如果用户在滚动视图上向下拖动,当他们抬起手指时,滚动视图不会弹回原位,滚动条保持可见。好像手指没有离开屏幕。它需要在scrollview上再点击一次,它就会捕捉到正确的位置,滚动条就会消失。。。

    下面是我在一个子类操作中创建的循环:

    - (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];
    }
    

    看来,虽然这项行动正在进行,但事情还是有点奇怪。。。

    有没有人知道这里可能发生了什么,以及更好的解决方法。。。

    谢谢

    1 回复  |  直到 14 年前
        1
  •  0
  •   Vincent Zgueb    14 年前

    我不明白你为什么要使用如此复杂的解决方案来满足你的需求,这似乎非常经典。

    在我看来,您最好使用Quartz的基本功能来创建动画,并让操作系统选择何时合成渲染。您还可以使用setNeedsLayout和setNeedDisplay方法通知渲染循环您已经修改了某些内容,而不是实现自己的循环。

    或者你有我不明白的特殊需求。