XIB中的动画按钮以编程方式移动

时间:2018-09-19 02:52:07

标签: ios swift uiviewanimation

我想为XIB中的按钮设置动画,以便在加载视图时向上移动。按钮下方的代码随动画一起移动,但是它从新位置BACK移到XIB中设置的原始位置。

感觉好像我错过了一些简单的事情,但是我一直试图以这种不同的方式来尝试失败数小时。这是因为我正在使用自动布局在XIB中设置动画吗?任何想法都值得赞赏。

// Relevant Part of XIB class
@IBDesignable class BottomNagivationBar: UIView {

    var view:UIView!

    //Buttons Outlet
    @IBOutlet weak var exploreIcon: UIButton!
}



override func viewDidLoad() {
    super.viewDidLoad()

UIView.animate(withDuration: 2, delay: 1, options: .allowUserInteraction, animations: {

        let position: CGFloat = 10
        let x:CGFloat = self.BottomNavigationBar.exploreIcon.frame.origin.x
        let y:CGFloat = self.BottomNavigationBar.exploreIcon.frame.origin.y + position

        self.BottomNavigationBar.exploreIcon.frame = CGRect(x: x, y: y, width: self.BottomNavigationBar.exploreIcon.frame.width, height: self.BottomNavigationBar.exploreIcon.frame.height) 

    })
}

2 个答案:

答案 0 :(得分:1)

  

这是因为我正在用自动布局在XIB中设置动画吗?

是的。动画和自动布局是敌人。您对位置进行动画处理,然后布局就会出现并应用您的约束,这些约束仍会指定按钮的起始位置,因此它会跳回。

答案 1 :(得分:0)

鉴于您要使用“自动版式”,您可能需要考虑使用CGAffineTransform对位置进行动画处理。加载视图后,您可以设置动画:

UIView.animate(withDuration: 2, delay: 1, options: .allowUserInteraction, animations: {

        self.exploreIcon.transform = CGAffineTransform(translationX: 0, y: 10.0)

})

如上所述,您还将希望将动画移出viewDidLoad并移至另一个功能,例如viewWillAppearviewDidLoad对于动画来说还为时过早,因为您的应用可能仍在启动/加载视图,并且动画可能不可见。