我想为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)
})
}
答案 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
并移至另一个功能,例如viewWillAppear
。 viewDidLoad
对于动画来说还为时过早,因为您的应用可能仍在启动/加载视图,并且动画可能不可见。