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

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

//版本1
-(IBAction)fadeUsingBlock{
NSLog(@“V1:单击…”);
[myLabel setAlpha:1.0];
[UIView animateWithDuration:1.5动画:^{
[myLabel setAlpha:0.0];
}];
}

较旧的样式版本(如下)允许在动画计时器结束前按下按钮,只需重置计时器即可重新启动。如果这两个都工作相同,我是否遗漏了什么,或者在3.2和4之间的操作中是否有变化

//版本2
-(i)法德辛戈尔德{
NSLog(@“V2:单击…”);
[myLabel setAlpha:1.0];
[UIView beginAnimations:nil上下文:nil];
[UIView设置动画持续时间:1.5];
[myLabel setAlpha:0.0];
[UIView委员会];
}

干杯,加里

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

-(iAction)fadeUsingBlock{
NSLog(@“V1:单击…”);
[myLabel setAlpha:1.0];
[UIView animateWithDuration:1.5
延迟:0
选项:UIViewAnimationOptionAllowUserInteraction
动画:^{
[myLabel setAlpha:0.0];
}
完成:无];
}

发表评论