Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使过渡动画在其他线程而不是主线程上运行_Ios - Fatal编程技术网

Ios 如何使过渡动画在其他线程而不是主线程上运行

Ios 如何使过渡动画在其他线程而不是主线程上运行,ios,Ios,我试图做一个从UIImage背景色到从服务器加载的实际图像的过渡动画。我发现转换会使UITableView在动画发生时结巴。有没有一种方法可以使过渡平稳而不引起口吃 float fadeDuration = 1.0f; imageView.backgroundColor = [UIColor averageColor]; UIImage * toImage = [UIImage imageWithData:data]; [UIView transitionWith

我试图做一个从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];

自从您第一次调用
getDataInBackgroundithBlock
以来,您在该块中编写的代码不会在主线程上执行,而是在另一个线程上执行。但是UI更改必须在UI/主线程上执行

要在主线程上执行代码,必须将
UIView transitionWithView
调用包装到
dispatch\u 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

如果这对您有效,请尝试回答。您是在某种回调或异步线程中执行上述代码吗?@luk2302我实际上是从[imageFile GetDataInBackgroundithBlock:^(NSData*data,NSError*error)调用它的。我在这里使用Parse。@Geeroz我在回答中为您发布了一个修复程序。我会尝试一下。谢谢@luk2302