上下图像视图,反之亦然Swift / iOS

问题描述

对于我的个人项目,我尝试使叶子的图像上升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.yorigin.x,或width)。

height