我已将下面两种方法连接到我的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];
}

干杯,加里

推荐答案

使用块设置动画不会阻止主线程.我认为您看到的行为是因为,默认情况下,用户交互在新的块调用中被禁用.您可以通过传递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];
}

Objective-c相关问答推荐

在 MacOS 上截屏

如何声明仅调试语句

如何删除警告按钮的框架在运行时会有所不同.

在 Objective-C 中定义协议的类别?

在objective-c中isa是什么意思?

如何在 UICollectionView 中居中行?

Objective-C:集合枚举块中的 continue继续?

仅替换 NSString 中子字符串的第一个实例

如何判断特定的 ViewController 视图当前是否可见?

警告的含义在演示过程中!

如何在Objective C(NSRegularExpression)中编写正则表达式?

UIKeyboardBoundsUserInfoKey 已弃用,改用什么?

如何在 Objective-C 中创建一个空白的透明 png?

如何删除应用程序可访问的所有 keys 串项目?

通过索引访问 NSMutableDictionary 中的对象

将 UIColor 保存到 NSUserDefaults 并从中加载

IOS 中的圆形进度条

获取最顶层的 UIViewController

如何将 UITableView 滚动到特定位置

如何调整 UIToolBar 左右内边距