Swift之动画总结

UIView动画个人笔记,代码简单,不过多赘述。
1.定义三个View

@IBOutlet weak var mFirstView: UIView!
@IBOutlet weak var mSecondView: UIView!

//var mOriginFrame: CGRect! //记录view的初始位置
var mFirstSubView: UIView!

2.初始化相关信息

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.mOriginFrame = self.mFirstView.frame

    self.mFirstSubView = UIView(frame: CGRect(x: 5, y: 5, width: 50, height: 50))
    self.mFirstSubView.backgroundColor = UIColor.blackColor()
    self.mFirstView.addSubview(self.mFirstSubView)
}

3.实现相关动画

//简单Y轴平移动画
func basicAnimate() {
    UIView.animateWithDuration(1) { () -> Void in
        self.mFirstView.frame.origin.y += 100
    }
}

//可配置option信息动画
func optionAnimate() {
    UIView.animateWithDuration(3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
        self.mFirstView.frame.origin.x += 100

        //Nest重写父层option属性
        UIView.animateWithDuration(3, delay: 0, options: [UIViewAnimationOptions.OverrideInheritedOptions, UIViewAnimationOptions.OverrideInheritedCurve, UIViewAnimationOptions.CurveEaseOut], animations: { () -> Void in
            self.mSecondView.frame.origin.x += 100
            }, completion: { (finished:Bool) -> Void in

        })
        }) { (finished: Bool) -> Void in

    }
}

//试图动画操作子视图
func operateSubview() {
    UIView.transitionWithView(self.mFirstView, duration: 1, options: [UIViewAnimationOptions.TransitionCrossDissolve, UIViewAnimationOptions.AllowAnimatedContent], animations: { () -> Void in
        self.mFirstSubView.frame.origin.x += 150
        }) { (finished: Bool) -> Void in

    }
}

//替换视图动画
func replaceView() {
    let view = UIView(frame: CGRect(x: 21, y: 150, width: 240, height: 60))
    view.backgroundColor = UIColor.magentaColor()
    UIView.transitionFromView(self.mFirstView, toView: view, duration: 1, options: UIViewAnimationOptions.TransitionCurlUp) { (finished:Bool) -> Void in
    }
}

//----------------------核心动画----------------------
/**
 *显式动画
 */
func newBasicAnimate() {
    //创建一个imageview视图
    let imgView = UIImageView(image: UIImage(named: "img"))
    imgView.frame = CGRect(x: 150, y: 200, width: 100, height: 100)
    self.view.addSubview(imgView)

    //1.选定角色
    let layer = imgView.layer
    layer.cornerRadius = 5.0

    //2.写剧本
    let scaleAnimate = CABasicAnimation(keyPath: "transform.scale")
    scaleAnimate.fromValue = 1.0
    scaleAnimate.toValue = 1.5
    scaleAnimate.autoreverses = true
    scaleAnimate.repeatCount = MAXFLOAT
    scaleAnimate.duration = 1.0

    //第二个剧本
    let opaqueAnimate = CABasicAnimation(keyPath: "opacity")
    opaqueAnimate.fromValue = 0.1
    opaqueAnimate.toValue = 1
    opaqueAnimate.autoreverses = true
    opaqueAnimate.repeatCount = MAXFLOAT
    opaqueAnimate.duration = 1.0

    //把剧本交给演员开始动画
    layer.addAnimation(scaleAnimate, forKey: "scaleAnimate")
    layer.addAnimation(opaqueAnimate, forKey: "opacityAnimate")
}

/**
*关键帧动画
*/
func newKeyFrameAniamte() {
    //创建一个imageview视图
    let imgView = UIImageView(image: UIImage(named: "img"))
    imgView.frame = CGRect(x: 200, y: 200, width: 40, height: 40)
    self.view.addSubview(imgView)

    //1.选定角色
    let layer = imgView.layer
    layer.cornerRadius = 5.0

    //2.写剧本
    let keyAnimate = CAKeyframeAnimation(keyPath: "position")
    //3.设定关键帧
    let value0 = NSValue(CGPoint: layer.position)
    let value1 = NSValue(CGPoint: CGPointMake(layer.position.x, layer.position.y + 200))
    let value2 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y + 200))
    let value3 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y))
    let value4 = NSValue(CGPoint: layer.position)
    //速度曲线
    //let tf0 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    //let tf1 = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
    //let tf2 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
    //let tf3 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
    //keyAnimate.timingFunctions = [tf0, tf1, tf2, tf3]
    //每段执行的时间
    //keyAnimate.keyTimes = [0.0, 0.5, 0.6, 0.7, 1]

    keyAnimate.values = [value0, value1, value2, value3, value4]
    keyAnimate.autoreverses = false
    keyAnimate.repeatCount = MAXFLOAT
    keyAnimate.duration = 6.0

    layer.addAnimation(keyAnimate, forKey: "keyAnimate")
}

附:CABasicAnimation的KeyPath
透明度为:opacity
其余如下:

时间: 2024-08-22 23:42:17

Swift之动画总结的相关文章

iOS开发——动画篇Swift篇&动画效果的实现

Swift - 动画效果的实现 在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用animateWithDuration来实现动画 (1)此方法共有5个参数: duration:动画从开始到结束的持续时间,单位是秒 delay:动画开始前等待的时间 options:动画执行的选项.里面可以设置动画的效果.可以使用UIViewAnimationOpt

Swift动画编程指南-01 简介

大家好,我是老镇,这段时间家里和工作上发生了很多的事情,所以很长一段时间都没有出来搞什么小动作了.在接下来的一段时间内我会制作一些列关于使用Swift进行动画编程的视频,希望和大家胃口. 在iOS的世界中,很多应用有着相似的颜色,相似的排版,可谓千篇一律.即使Apple的UI设计与用户体验相当的出色,也难免会产生审美疲劳.为了寻求差异化,新颖的动画设计是一个很好的突破口. 在这个系列的视频中,我们一同学习的内容如下: 首先会介绍几个非常棒的动画Show 接着会谈谈动画会涉及到得几个属性 思考动画

Swift coreAnimation 加计时器写的游戏《飞机大战》

最近在学习swift的动画和图层,就用现学的东西写了个游戏,基本思想 基本功能都实现了,图片都是在网上找得.希望能帮助大家更好的理解动画和图层. 声明下,我是初学者,代码写的不好.大家应该都能看懂 . 效果图 源代码地址 :  点击打开链接      地址失效了的话 我可以补上 版权声明:本文为博主原创文章,未经博主允许不得转载.

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

iOS超全开源框架、项目和学习资料汇总:UI篇

上下拉刷新控件 1. MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.(推荐) 2. SVPullToRefresh --下拉刷新控件4500+star,值得信赖3. CBStoreHouseRefreshControl --一个效果很酷炫的下拉刷新控件3600+star4. BreakOutToRefresh --一个下拉刷新打砖块的开源 Swift 库,能让用户在等待下拉刷新的时候

iOS、mac开源项目及库汇总

UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHou

最全面的iOS和Mac开源项目和第三方库汇总

UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHou

Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl - XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHouseR

iOS学习资源收集

https://github.com/Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.com/search 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 其他动画 网络相关 网络连接 图像获取 网络