ios - 查看动画不起作用 - ios Swift 3

标签 ios iphone swift animation view

我有一段代码可以为 mainView 提供 Spring 效果。

但我没有得到想要的效果,我只能通过 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)
}  

你能帮忙把 Spring 效果带到mainView吗?

谢谢

最佳答案

要使用动画,您应该了解 View Controller 生命周期。这对于您描述的情况至关重要,因为您应该了解何时以及为何开始动画。

首先请阅读官方关于生活圈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)
    }
}

动画示例:

enter image description here

关于ios - 查看动画不起作用 - ios Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43407863/

相关文章:

ios - iphone 中调用电话中的callID 和地址簿中的记录id 是否相同?

iphone - 从 UITableView 选择单元格并转到另一个 UITableView

swift - 将带有纪元时间和时区的时间戳字符串转换为 NSDate

ios - 在objective-c中导入swift类,<myModule>-Swift.h文件未找到

objective-c - iPhone 屏幕截图以供查看

ios - 在 touchesBegan 中创建 Sprite,然后使用 UIPanGestureRecognizer 移动但延迟很小

ios - 如何在 CallKit 上显示背景图片

iphone - 在 DrawRect 方法中收到内存警告

android - 如何使用/合并 CPP 文件到 Android 项目?

swift - 在 Swift Sprite Kit 中预加载纹理时如何防止白屏?