如何使Transition动画在不在主线程上的其他线程上运行

时间:2015-10-09 05:02:56

标签: ios

我正在尝试从UIImage背景颜色到从服务器加载的实际图像进行过渡动画。我发现转换会在动画发生时使UITableView卡顿。有没有办法使过渡平稳而不会造成口吃。

float fadeDuration = 1.0f;
imageView.backgroundColor = [UIColor averageColor];
UIImage * toImage = [UIImage imageWithData:data];
                [UIView transitionWithView:imageView
                                  duration:fadeDuration
                                   options:UIViewAnimationOptionTransitionCrossDissolve
                                animations:^{
                                    imageView.image = toImage;
                                } completion:nil];

1 个答案:

答案 0 :(得分:0)

由于您第一次调用getDataInBackgroundWithBlock,您在该块中编写的代码不会在主线程上执行,而是在其他线程上执行。但是必须在UI /主线程上执行 UI更改

要获取要在主线程上执行的代码,您必须将UIView transitionWithView调用包装到dispatch_asnyc

// ... some non-UI code
UIImage * toImage = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
    [UIView transitionWithView:imageView
                      duration:fadeDuration
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        imageView.image = toImage;
                    } completion:nil
    ];
    // ... more UI code
});
// ... more non-UI code