Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在XIB中设置按钮动画,以编程方式移动_Ios_Swift_Uiviewanimation - Fatal编程技术网

Ios 在XIB中设置按钮动画,以编程方式移动

Ios 在XIB中设置按钮动画,以编程方式移动,ios,swift,uiviewanimation,Ios,Swift,Uiviewanimation,我想在XIB中设置一个按钮的动画,以便在视图加载时向上移动。使用下面的代码,按钮会随着动画移动,但它会从新位置移回在XIB中设置的原始位置 我觉得我错过了一些简单的东西,但我一直试图用不同的方式来处理这个问题,但都没有成功。这是因为我正在用自动布局在XIB中设置动画吗?欢迎提出任何意见 // Relevant Part of XIB class @IBDesignable class BottomNagivationBar: UIView { var view:UIView!

我想在XIB中设置一个按钮的动画,以便在视图加载时向上移动。使用下面的代码,按钮会随着动画移动,但它会从新位置移回在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) 

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


对。动画和自动布局是敌人。设置位置动画,然后布局出现并应用约束,这些约束仍然指定按钮开始的位置-因此它会向后跳
UIView.animate(withDuration: 2, delay: 1, options: .allowUserInteraction, animations: {

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

})

如上所述,您还需要将动画移出
viewDidLoad
,并移到另一个功能中,例如
viewwillbeen
viewDidLoad
对于动画来说太早了,因为您的应用程序可能仍在启动/加载视图,并且您的动画可能不可见。

是否在此视图上启用了自动布局?因为如果是这样,将覆盖您手动对帧所做的任何更改。也不要在
viewDidLoad
中启动动画。那太早了。在override func viewdide(uu动画:Bool){}中添加该代码