iOS开发傲视苍穹iOS《Swift》VIP专题Swift

开始用Swift开发iOS 10 - 14 基础动画,模糊效果和

2017-07-24  本文已影响440人  Andy_Ron

动画是通过一系列静态图片(帧)快速显示来模拟动作和形状的变化过程。

在iOS中,创建基础动画很简单,只需要利用UIView的类型方法:animate(withDuration:animations:)。这个方法的原理就是,设置好开始状体和结束状态,然后* UIView animation* 创建中间的过程效果。继续上一篇开始用Swift开发iOS 10 - 13 Self Sizing Cells and Dynamic Type

添加评级Button

创建Restaurant Review视图控制器

按照下图设置之后是UI:


创建Present modally类型的Segue

开始用Swift开发iOS 10 - 10 Navigation Controller的介绍和Segue中介绍过Segue类型。Present modally是新页面将以动画形式从底部出现到覆盖整个手机屏幕。

定义如何退出Review View Controller

Navigation Controller中自带了返回按钮,这边需要自己设置unwind segue

    @IBAction func close(segue:UIStoryboardSegue) {
    }

其次在IB中关联返回。control+drag关闭按钮到Exit,选择closeWithSegue:

为背景图片添加模糊效果

UIVisualEffectView

        let blurEffect = UIBlurEffect(style: .dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = view.bounds
        backgroundImageView.addSubview(blurEffectView)

模糊效果有点像在要添加的视图上面添加一个视图(UIVisualEffectView),这图有模糊效果(UIBlurEffect),模糊样式通过UIBlurEffectStyle控制,有三种extraLight, light, dark

模糊样式:左为Light,右为Dark

实现 UIView Animation

    override func viewDidAppear(_ animated: Bool) {
        UIView.animate(withDuration: 0.3, animations: {
            self.containerView.transform = CGAffineTransform.identity
        })
    }

CGAffineTransform.identity表示原本设置的大小和位置状态。

动画的变化过程

Spring 动画

只要修改一下结束状态就可以了:

        UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.2, options: .curveEaseInOut, animations: {
            self.containerView.transform = CGAffineTransform.identity
        }, completion: nil)

从上向下的动画

只要修改一下初始状态,把初始位置设置在上面即可:

        containerView.transform = CGAffineTransform.init(translationX: 0, y: -1000)

组合两种变化

containerView.transform = CGAffineTransform.init(translationX: 0, y: -1000)修改成:

let scaleTransform = CGAffineTransform.init(scaleX: 0, y: 0)
let translateTransform = CGAffineTransform.init(translationX: 0, y: -1000)
let combineTransform = scaleTransform.concatenating(translateTransform)
containerView.transform = combineTransform

Unwind Segues 和数据传输

Review View中点击三个不同评价按钮也通过Unwind Segues返回并传输数据。

@IBAction func ratingButtonTapped(segue: UIStoryboardSegue) {
}
    @IBAction func ratingButtonTapped(segue: UIStoryboardSegue) {
        if let rating = segue.identifier {
            restaurant.isVisited = true
            
            switch rating {
            case "greate":
                restaurant.rating = "Absolutely love it! Must try."
            case "good":
                restaurant.rating = "Pretty good."
            case "dislike":
                restaurant.rating = "I don't like it."
            default:
                break
            }
        }
        tableView.reloadData()
    }

修改ReviewViewController中的图片为相应的图片

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showReview" {
            let destinationController = segue.destination as! ReviewViewController
            destinationController.restaurant = self.restaurant
        }
    }
        let image = UIImage(named: self.restaurant.image)
        backgroundImageView.image = image
        topImageView.image = image

为closeButton添加动画效果

        UIView.animate(withDuration: 0.5, delay: 0.5, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.3, options: .curveEaseInOut, animations: {
            
            self.closeButton.transform = CGAffineTransform.identity
            
        }, completion: nil)

代码

Beginning-iOS-Programming-with-Swift

说明

此文是学习appcode网站出的一本书 《Beginning iOS 10 Programming with Swift》 的一篇记录

系列文章目录

上一篇下一篇

猜你喜欢

热点阅读