Iphone animateWithDuration:动画:阻止主线程吗?

Iphone animateWithDuration:动画:阻止主线程吗?,iphone,objective-c,cocoa-touch,animation,multithreading,Iphone,Objective C,Cocoa Touch,Animation,Multithreading,我已将下面两种方法连接到UI中的单独按钮,但注意到在按下“VERSION 1”按钮后,我无法再次按下按钮,直到方法中的动画持续时间结束。我的理解是,动画使用自己的线程,以避免阻止主应用程序 // VERSION 1 -(IBAction)fadeUsingBlock { NSLog(@"V1: Clicked ..."); [myLabel setAlpha:1.0]; [UIView animateWithDuration:1.5 animations:^{

我已将下面两种方法连接到UI中的单独按钮,但注意到在按下“VERSION 1”按钮后,我无法再次按下按钮,直到方法中的动画持续时间结束。我的理解是,动画使用自己的线程,以避免阻止主应用程序

// VERSION 1
-(IBAction)fadeUsingBlock {
    NSLog(@"V1: Clicked ...");
    [myLabel setAlpha:1.0];
    [UIView animateWithDuration:1.5 animations:^{
        [myLabel setAlpha:0.0];
    }];
}
较旧的样式版本(如下)允许在动画计时器结束前按下按钮,只需重置计时器即可重新启动。如果这两个都工作相同,我是否遗漏了什么,或者在3.2和4之间的操作中是否有变化

// VERSION 2
-(IBAction)fadeUsingOld {
    NSLog(@"V2: Clicked ...");
    [myLabel setAlpha:1.0];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.5];
    [myLabel setAlpha:0.0];
    [UIView commitAnimations];
}

gary为animateWithDuration:干杯,课程参考没有提到线程,所以我不确定

对于
beginAnimations:context:和committeanimation:
,是的,它们在单独的线程中运行


视图对象的某些属性更改可以设置动画,例如,设置帧、边界、中心和变换属性。如果在动画块中更改这些特性,则将为从当前状态到新状态的更改设置动画。调用beginAnimations:context:class方法开始动画块,设置要设置动画的属性,然后调用commitAnimations类方法结束动画块。动画在单独的线程中运行,并在应用程序返回运行循环时开始。其他动画类方法允许您控制块内动画的开始时间、持续时间、延迟和曲线。

使用块制作动画不会阻止主线程。我认为您看到的行为是因为,默认情况下,用户交互在新块调用期间被禁用。您可以通过传递UIViewAnimationOptionAllowUserInteraction(调用
animationWithDuration:delay:options:animations:completion
)来覆盖此选项,如下所示:

-(IBAction) fadeUsingBlock {
    NSLog(@"V1: Clicked ...");
    [myLabel setAlpha:1.0];
    [UIView animateWithDuration:1.5 
                          delay:0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                         [myLabel setAlpha:0.0];
                     }
                     completion:nil];
}

啊,这是有道理的,我在文档中错过了这个选项,我将查找它。非常感谢,非常感谢。谢谢你。该死,这让我烦透了。它实际上很烦人,默认情况下它没有打开,因为它确实说它阻止了与正在设置动画的视图的交互,但实际上它阻止了整个UI!伙计,如果在即将到来的iOS 5.0中修复了这一点不是很好吗。。。