viewDidAppear() 中的图像动画有问题,有什么建议吗?
problem with image animation in viewDidAppear(), any advice?
我正在尝试创建一个滚动浏览一系列图像的动画。以下代码没有任何动画,屏幕上只显示该系列的最后一张图片。我该如何修复这个动画?
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
imageSelection(score: 50)
}
func imageSelection(score: Int) {
var myScore = score
if score < 10 {
myScore = 1
}
else if score < 20 && score > 10 {
myScore = 2
}
else if score < 30 && score > 20 {
myScore = 3
}
else if score < 40 && score > 30 {
myScore = 4
}
else if score < 50 && score > 40 {
myScore = 5
}
else if score == 50 {
myScore = 6
}
for i in 1...myScore{
UIView.animate(withDuration: 0.5) {
self.cookieImage.image = UIImage(named: "rewardsCookie\(i)")
self.view.layoutIfNeeded()
}
}
}
您是否正在尝试制作 "flip book" 在一系列图像之间翻转的动画?最简单的方法是使用 UIImageView 动画。有关详细信息,请参阅 Xcode 中的 UIImageView class 参考(请参阅标题为 "Animating a Sequence of Images" 的部分。
正如 Matt 所说,您没有为任何可设置动画的属性设置动画。您可以通过使用图层动画来实现您想要的效果。用以下代码替换 for
循环。
var images = [CGImage]()
for i in 1...myScore{
images.append(UIImage(named: "rewardsCookie\(i)")!.cgImage!)
}
let animation = CAKeyframeAnimation(keyPath: "contents")
animation.values = images
let delay = 3.0 // in case you need to delay your animation
animation.duration = 5.0 // change to the total duration (ex: 0.5 * myScore)
animation.beginTime = CACurrentMediaTime() + delay
self.cookieImage.layer.add(animation, forKey: nil)
请注意,对于图层动画,您实际上看到的不是 UIImageView,而是它的缓存版本。一旦动画完成并且原始层再次显示,它就会从屏幕上移除。因此,您将看到动画开始前在 cookieImageView
上可见的图像。为了持久化最后一张图片,在上面的代码后添加下面一行
self.cookieImage.image = UIImage(named: "rewardsCookie\(myScore)")
有关详细信息,请查看 Apple's Documentation。
我正在尝试创建一个滚动浏览一系列图像的动画。以下代码没有任何动画,屏幕上只显示该系列的最后一张图片。我该如何修复这个动画?
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
imageSelection(score: 50)
}
func imageSelection(score: Int) {
var myScore = score
if score < 10 {
myScore = 1
}
else if score < 20 && score > 10 {
myScore = 2
}
else if score < 30 && score > 20 {
myScore = 3
}
else if score < 40 && score > 30 {
myScore = 4
}
else if score < 50 && score > 40 {
myScore = 5
}
else if score == 50 {
myScore = 6
}
for i in 1...myScore{
UIView.animate(withDuration: 0.5) {
self.cookieImage.image = UIImage(named: "rewardsCookie\(i)")
self.view.layoutIfNeeded()
}
}
}
您是否正在尝试制作 "flip book" 在一系列图像之间翻转的动画?最简单的方法是使用 UIImageView 动画。有关详细信息,请参阅 Xcode 中的 UIImageView class 参考(请参阅标题为 "Animating a Sequence of Images" 的部分。
正如 Matt 所说,您没有为任何可设置动画的属性设置动画。您可以通过使用图层动画来实现您想要的效果。用以下代码替换 for
循环。
var images = [CGImage]()
for i in 1...myScore{
images.append(UIImage(named: "rewardsCookie\(i)")!.cgImage!)
}
let animation = CAKeyframeAnimation(keyPath: "contents")
animation.values = images
let delay = 3.0 // in case you need to delay your animation
animation.duration = 5.0 // change to the total duration (ex: 0.5 * myScore)
animation.beginTime = CACurrentMediaTime() + delay
self.cookieImage.layer.add(animation, forKey: nil)
请注意,对于图层动画,您实际上看到的不是 UIImageView,而是它的缓存版本。一旦动画完成并且原始层再次显示,它就会从屏幕上移除。因此,您将看到动画开始前在 cookieImageView
上可见的图像。为了持久化最后一张图片,在上面的代码后添加下面一行
self.cookieImage.image = UIImage(named: "rewardsCookie\(myScore)")
有关详细信息,请查看 Apple's Documentation。