问题描述
对于我的个人项目,我尝试使叶子的图像上升5秒钟,然后降低5秒钟。 仅在升高和降低纸张后,它才能很好地工作,它可以改变位置并将其很好地传送到屏幕的底部。 我希望它从下降结束的地方上升。我已经尝试了几件事,但是没有任何效果。我希望可以在下降后恢复原始位置,但我认为这样会使图像在屏幕上闪烁。 有什么想法吗?
func upLeaf(){
let xPosition = imageLeaf.frame.origin.x
let yPosition = imageLeaf.frame.origin.y - 100 // Slide Up - 20px
let width = imageLeaf.frame.size.width
let height = imageLeaf.frame.size.height
UIView.animate(withDuration: 5.0,animations: {
self.imageLeaf.frame = CGRect(x: xPosition,y: yPosition,width: width,height: height)
})
}
func downLeaf(){
let xPosition = imageLeaf.frame.origin.x
let yPosition = imageLeaf.frame.origin.y + 100 // Slide Up - 20px
let width = imageLeaf.frame.size.width
let height = imageLeaf.frame.size.height
UIView.animate(withDuration: 5.0,height: height)
})
secondUp = true
}
解决方法
可以使用CGAffineTransform而不是使用帧来执行动画。它更强大且同样容易:
UIView.animate(withDuration: 5.0,animations: {
line3.transform = CGAffineTransform(translationX: 0,y: 100)
})
要返回初始状态时,请输入:
UIView.animate(withDuration: 5.0,animations: {
line3.transform = CGAffineTransform.identity
})
CGAffineTransform
会记住您的视图的初始参数,因此您不必自己进行任何计算。
如果您只想让叶子上下运动,则可以为imageLeaf
的{{1}}设置动画(无需跟踪frame.origin.y
,origin.x
,或width
)。
height