查看动画不起作用 - ios Swift 3
Posted
技术标签:
【中文标题】查看动画不起作用 - ios Swift 3【英文标题】:View Animation does not work - ios Swift 3 【发布时间】:2017-04-14 08:22:01 【问题描述】:我有这段代码应该给 mainView 一个弹簧效果。
但我没有得到想要的效果,我只是通过 Storyboards 将 Transition 样式应用于 ViewController。
override func viewDidLoad()
super.viewDidLoad()
self.statusBarHidden = UIApplication.shared.isStatusBarHidden
UIApplication.shared.setStatusBarHidden(true, with: .none)
self.mainView = UIView(frame: CGRect(x: self.view.getWidth/20, y:self.view.getHeight/6, width:self.view.getWidth/1.3 , height: self.view.getHeight/1.3))
self.mainView.backgroundColor = UIColor.blue
self.mainView.center.x = self.view.center.x
self.mainView.center.y = self.view.center.y
self.mainView.transform = CGAffineTransform(scaleX: 0.8, y: 1.2) // initial view distorted scale so it has a starting point for the animation
self.view.addSubview(self.mainView)
UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations:
self.mainView.transform = .identity // get back to original scale in an animated way
, completion: nil)
能否请您帮忙将弹簧效果添加到 mainView 中?
谢谢
【问题讨论】:
在viewDidAppear
而不是viewDidLoad
中开始动画。在viewDidLoad
中,视图尚不可见且无法动画化。
只需在 UIView.animate
块内调用 view.layoutIfNeeded()
@Sulthan 不错!谢谢!
【参考方案1】:
要使用动画,您应该了解视图控制器的生命周期。这对于您描述的情况至关重要,因为您应该了解何时以及为何开始动画。
首先请阅读官方documentation的生活圈。
代码,但试着理解为什么它现在可以工作:
class ViewController: UIViewController
var mainView = UIView()
override func viewDidLoad()
super.viewDidLoad()
addMainView()
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
animateMainView()
func addMainView()
self.mainView = UIView(frame: CGRect(x: self.view.frame.width/20, y:self.view.frame.height/6, width:self.view.frame.width/1.3 , height: self.view.frame.height/1.3))
self.mainView.backgroundColor = UIColor.blue
self.mainView.center.x = self.view.center.x
self.mainView.center.y = self.view.center.y
self.view.addSubview(self.mainView)
func animateMainView()
self.mainView.transform = CGAffineTransform(scaleX: 0.8, y: 1.2) // initial view distorted scale so it has a starting point for the animation
UIView.animate(withDuration: 0.9, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations:
self.mainView.transform = .identity // get back to original scale in an animated way
, completion: nil)
动画示例:
【讨论】:
谢谢你解释我! 我认为这不是最好的解决方案。addSubview
代码应该在 viewDidLoad
中,而不应该在 viewDidAppear
中,因为这意味着它不会立即出现。
@Sulthan 要成为优秀的 UIKit 公民,我什至添加了 super.viewDidAppear(动画)。谢谢你的建议。
我认为您的意思不是“生活圈”,对吗? ;)
@Rikh 我的意思是视图控制器生命圈))但很好的捕捉以上是关于查看动画不起作用 - ios Swift 3的主要内容,如果未能解决你的问题,请参考以下文章
swift animateWithDuration 在 iOS 7 中不起作用
UIView transform.scaleBy 动画不起作用
swift - 从 var(UITextField 输入)中删除空格不起作用