【发布时间】:2016-01-03 05:52:52
【问题描述】:
我正在尝试让view 从屏幕中心设置动画,以便在视图加载后 1 秒后离开屏幕。
我遇到的问题是,在 view 在加载时处于原始(正确)位置的一毫秒后,它会捕捉到新位置并动画回到原始位置。
我在viewDidLoad中有以下代码
override func viewDidAppear(animated: Bool) {
UIView.animateWithDuration(0.7, delay: 1, options: .CurveEaseOut, animations: {
var loadingViewFrame = self.loadingView.frame
loadingViewFrame.origin.y += 600
self.loadingView.frame = loadingViewFrame
}, completion: { finished in
print("moved")
})
}
我已尝试将此代码放入 button 操作中,它工作正常,那么在 viewWillAppear 上制作动画时我应该使用其他方法吗?还是我错过了其他方法?
我已删除所有自动布局约束,因为我读到它们可能会导致一些问题。
我在viewDidAppear 以及viewWillAppear 和viewDidLoad 中还有其他代码,如果您认为它有用,我可以在这里展示它们,但我已经注释掉了所有这些代码,只留下基本代码并且仍然发生相同的错误。
非常感谢您的帮助。
编辑 1
我已将代码移至viewDidLayoutSubviews 并使用dispatch_once 确保只执行一次。图像仍会从新位置动画到原始位置,但现在图像在加载时有一毫秒内未位于原始位置。
这是我添加的代码
var token: dispatch_once_t = 0
override func viewDidLayoutSubviews() {
dispatch_once(&token) {
UIView.animateWithDuration(0.7, delay: 1, options: .CurveEaseOut, animations: {
var loadingViewFrame = self.loadingView.frame
loadingViewFrame.origin.x += 600
self.loadingView.frame = loadingViewFrame
}, completion: { finished in
print("moved")
})
}
}
【问题讨论】:
标签: ios swift animation uiview viewdidappear