zoukankan      html  css  js  c++  java
  • [Xcode 实际操作]九、实用进阶-(20)创建位移关键帧动画:通过添加运动关键点制作位移动画

    目录:[Swift]Xcode实际操作

    本文将演示如何通过添加运动关键点的方式,来制作位移动画

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

     1 import UIKit
     2  
     3  //添加一个代理协议CAAnimationDelegate
     4  class ViewController: UIViewController, CAAnimationDelegate {
     5     
     6     override func viewDidLoad() {
     7         super.viewDidLoad()
     8         // Do any additional setup after loading the view, typically from a nib.
     9         
    10         //创建一个图像视图,并设置位置在(40,80),尺寸为(64,64)
    11         let imageView = UIImageView(frame: CGRect(x: 40, y: 80,  64, height: 64))
    12         //从项目资源文件夹加载资源,并赋予图像视图
    13         imageView.image = UIImage(named: "star")
    14         //将图像视图,添加到当前视图控制器的根视图
    15         self.view.addSubview(imageView)
    16         
    17         //初始化一个关键帧动画对象,
    18         //该对象提供了对对关键帧动画的支持
    19         //可以为层属性指定关键路径,使其产生相应的动画
    20         let animation = CAKeyframeAnimation(keyPath: "position")
    21         
    22         //添加一个路径上的四个关键锚点
    23         let point1 = CGPoint(x: 40, y: 80)
    24         let point2 = CGPoint(x: 280, y: 80)
    25         let point3 = CGPoint(x: 60, y: 300)
    26         let point4 = CGPoint(x: 280, y: 300)
    27         
    28         //创建帧动画的值数组,在动画运行的时候,
    29         //数组中的每个值,就会被轮流进行插值使用
    30         animation.values = [NSValue(cgPoint: point1), NSValue(cgPoint: point2),
    31                             NSValue(cgPoint: point3), NSValue(cgPoint: point4)]
    32         //再创建一个数组,存储帧动画的关键时间点
    33         animation.keyTimes = [NSNumber(value: 0.0), NSNumber(value: 0.4),
    34                               NSNumber(value: 0.6), NSNumber(value: 1.0)]
    35         
    36         //设置关键帧动画的代理对象,为当前视图控制器
    37         animation.delegate = self
    38         //设置关键帧动画时长为5秒钟
    39         animation.duration = 5.0
    40         
    41         //给图像视图的层,添加关键帧动画,开始动画的播放
    42         imageView.layer.add(animation, forKey: "Move")
    43     }
    44     
    45     //添加一个代理方法,用来响应动画开始的事件
    46     func animationDidStart(_ anim: CAAnimation) {
    47         //在控制台打印输出日志
    48         print("The animation starts")
    49     }
    50     
    51     //添加一个代理方法,用来响应动画结束的事件
    52     func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
    53         //在控制台打印输出日志
    54         print("End of the animation")
    55     }
    56     
    57     override func didReceiveMemoryWarning() {
    58         super.didReceiveMemoryWarning()
    59         // Dispose of any resources that can be recreated.
    60     }
    61  }

    留意动画速度的变化。

  • 相关阅读:
    Spark Scala当中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法
    Spark和Scala当中的collect方法的用法和例子
    Win7 Eclipse 搭建spark java1.8(lambda)环境:WordCount helloworld例子
    System memory 259522560 must be at least 4.718592
    Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子
    Win7 Eclipse 搭建spark java1.8编译环境,JavaRDD的helloworld例子
    indows Eclipse Scala编写WordCount程序
    Spark Scala当中reduceByKey的用法
    Spark Scala当中reduce的用法和例子
    Scala当中parallelize并行化的用法
  • 原文地址:https://www.cnblogs.com/strengthen/p/10092154.html
Copyright © 2011-2022 走看看