ios - 如何检查 Assets 中的 UIImage 是否已完全加载

标签 ios swift animation uiimage uiviewanimationtransition

在 View Controller 中,我有两个彼此重叠的 ImageView 以及两个标记为“上一个”和“下一个”的按钮。

我有一个 UIImage 数组

let images = [UIImage(named: "1"), UIImage(named: "2"), UIImage(named: "3")]

我有这个辅助方法可以通过淡入淡出过渡到下一个图像

func changeImage(image: UIImage){
self.topImageView.alpha = 0 //This is to initially make the next image to fade in
self.topImageView.image = image
UIView.animateWithDuration(0.5, animations: { () -> Void in 
self.topImageView.alpha = 1.0  //this will fade in the next image
}) { (Bool) -> Void in
    self.bottomImageView.image = image //Previous image will be replaced with the now current image after fade
    }
}

我将此辅助方法附加到上一个和下一个按钮上以循环浏览图像

现在的问题是,每当我点击按钮时,淡入淡出动画都不起作用,只是简单地将图像加载到底部ImageView 上。但是当我点击上一个时,淡入淡出就会起作用。

我相信它这样做的原因是因为下一个图像仍然是第一次加载,然后当尝试返回它时,淡入淡出最终会起作用。

那么如何预先加载图像以使淡入淡出动画起作用?

最佳答案

我建议不要使用两个重叠的 UIImageView,而只使用其中一个。然后您可以使用以下代码来更改图像动画:

UIView.transitionWithView(self.topImageView, duration: 0.5, options: [.TransitionCrossDissolve], animations: { () -> Void in
    self.topImageView.image = image
    }) { completed in
        print("transition finished")
}

两个 imageView 只会引入不必要的问题(正如您的问题清楚地表明的那样)。而且一个 View 简直要干净得多。

关于您的代码为何无法按预期工作的理论:我没有听说过图像加载花费了任何明显的时间 - 一定还有其他问题。例如,您的 topImageView 真的位于其他 View 之上吗?

关于ios - 如何检查 Assets 中的 UIImage 是否已完全加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536803/

相关文章:

javascript - 如何为页面中的所有动画添加公共(public)回调?

ios - 状态栏颜色 : preferredStatusBarStyle doesn't work

ios - Collection View 选择机制,存在吗?

json - 使用 Swift 读取 JSON 文件

ios - 如何在 View 可见时添加动画?

javascript - 使用 Promise 将动画链接在一起的最简单方法是什么?

ios - 快速枚举类

ios - 索引处理文件 Xcode 超慢构建和运行

ios - AdMob 中介测试?

ios - 当我在 Xcode 中运行应用程序时,按钮字体与 Storyboard字体不匹配