2012-07-22 43 views
0

我正在尝试使用通常的UIView类方法来动画一些东西。我使用流行的iCarousel库调用这些动画方法。当我滚动旋转木马时,动画立即进入完成状态并调用完成功能(忽略动画的持续时间)。 finished布尔值为true,所以看起来不像动画被中断。核心动画立即调用完成函数

当我在iCarousel的委托方法之外触发这些动画时,它们可以工作。我不打算修理iCarousel,也不会认为它有什么问题。我更加好奇,里面的代码可能会导致我的动画立即完成。我能做些什么来避免这个问题。

下面是一个例子:

- (void)carouselCurrentItemIndexDidChange:(iCarousel *)carousel { 
    [UIView 
    animateWithDuration:5.0f 
    delay:0 
    options: 
     UIViewAnimationOptionCurveEaseOut | 
     UIViewAnimationOptionOverrideInheritedDuration | 
     UIViewAnimationOptionOverrideInheritedCurve 
    animations:^{ 
     myView.alpha = 0; 
    } 
    completion:^(BOOL finished){ 
     NSLog(@"Completed. Did it finish? %i", finished); 
    }]; 
} 

最后的细节:
iCarousel的文件中提到,您可以更改轮转的useDisplayLink财产,以避免与动画的一些冲突。这似乎没有任何区别。

在此先感谢您的帮助!

回答

2

我在iCarousel的源代码中发现了这个问题。出于某种原因在他们的库中,他们使用[CATransaction setDisableActions:YES];禁用动画,然后在一堆不同的地方重新启用它。其中一个这样的地方跨过了一堆回调,这阻止了我的动画正常开火。

通过iCarousel代码判断,这是非常有意的,所以我想我必须在自己的代码中解决这个问题。

编辑:这是我更新的代码,避免此问题:

- (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel { 
    BOOL previousDisableActions = [CATransaction disableActions]; 
    [CATransaction setDisableActions:NO]; 

    // Begin animation here. 

    [CATransaction setDisableActions:previousDisableActions]; 
} 

更新: iCarousel笔者通过内部加入我上面围绕各代表呼吁建议的代码已经修复了这个漏洞。看起来这是固定好的。