fuz*_*oat 40 iphone animation multithreading cocoa-touch objective-c
我已将下面的两种方法连接到我的UI中的单独按钮,但是注意到按下"VERSION 1"按钮后我再也无法按下按钮,直到方法中的动画持续时间结束.我的理解是动画使用自己的线程,以免阻塞主应用程序.
// VERSION 1
-(IBAction)fadeUsingBlock {
NSLog(@"V1: Clicked ...");
[myLabel setAlpha:1.0];
[UIView animateWithDuration:1.5 animations:^{
[myLabel setAlpha:0.0];
}];
}
Run Code Online (Sandbox Code Playgroud)
较旧的样式版本(下方)允许在动画计时器结束之前按下按钮,只需将计时器重置为重新开始.如果这些都是相同的,我是否遗漏了某些东西,或者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];
}
Run Code Online (Sandbox Code Playgroud)
干杯加里
zpa*_*ack 93
使用块进行动画处理不会阻止主线程.我认为您所看到的行为是因为默认情况下,用户交互是使用新的块调用禁用持续时间动画.您可以通过传递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];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29515 次 |
最近记录: |