CC论坛

 找回密码
 立即注册
查看: 855|回复: 0

[iOS] 核心动画(CoreAnimation)之CABasicAnimation的使用

[复制链接]

56

主题

57

帖子

339

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
339
发表于 2020-2-18 22:33:40 | 显示全部楼层 |阅读模式
了解CoreAnimation
  • CoreAnimation是苹果提供的一套基于绘图的动画框架。


上图是苹果给出的体系结构,最低层是硬件层(GPU),上层是OpenGL和CoreGraphics,再上层CoreAnimation,最上层就是UIKit.
所以CoreAnimation是基于OpenGL和CoreGraphics封装的,并不是直接接触硬件层.
  • CoreAnimation不是一个独立框架,而是封装在QuartzCore框架中.
  • CoreAnimation是作用于layer,不是View,这点要注意.

CABasicAnimation使用
CoreAnimation包含了许多的高级动画效果,CABasicAnimation只是其中一小部分,也是最基础动画.

CABasicAnimation的常用属性详解
  • timingFunction 可选
控制动画的运行节奏;有以下5种类型

kCAMediaTimingFunctionLinear 均速(线性运行)
kCAMediaTimingFunctionEaseIn 先缓慢进入,再加速离开
kCAMediaTimingFunctionEaseOut 全速开始,慢慢减速
kCAMediaTimingFunctionEaseInEaseOut先慢慢加速,再慢慢减速
kCAMediaTimingFunctionDefault 默认值.先慢慢加速,再慢慢减速,但是它加速减速速度略慢

  • fromValue 必选
动画初始值(状态).类型:NSValue NSNumber

  • toValue 必选
动画结束值(状态).类型:NSValue NSNumber

  • duration 必选

每次动画时间
  • autoreverses 可选

默认为NO,当设置为YES时,表示启用回退动画,即由toValue到fromValue做回退动画
  • removedOnCompletion 可选

默认为YES,动画结束后从layer移除,当设置为NO时,不移除
  • fillMode 可选

控制动画开始之前或者动画结束之后layer的行为.有以下4种类型

kCAFillModeForwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始
kCAFillModeBackwards 当动画结束后,layer会一直保持着动画最后的状态
kCAFillModeBoth 动画加入之后在开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
kCAFillModeRemoved 默认值.动画结束后,不改变layer的状态,layer会恢复到之前的状态

  • repeatCount 可选
动画重复次数.默认为0,不可与repeatDuration同时使用.(非重复动画不用关注此参数)

  • repeatDuration 可选
动画重复时间.不可与repeatCount同时使用,(系统会根据 repeatDuration/duration 计算出要做多少次动画).(非重复动画不用关注此参数)

动画实现

  1. [list][*](void)myAnimation {[/list]
  2.    
  3.     NSString *keyPath = @"position";
  4.     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:keyPath];
  5.    
  6.     // 速度控制函数,控制动画运行的节奏
  7.     animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  8.    
  9.     // YES=启用回退动画,即由toValue到fromValue做回退动画
  10.     animation.autoreverses = YES;
  11.    
  12.     // YES=动画结束时从layer移除
  13.     animation.removedOnCompletion = YES;
  14.    
  15.     // 控制动画开始之前或者动画结束之后[color=#ff0000]layer[/color]的行为
  16.     animation.fillMode = kCAFillModeForwards;
  17.     // 动画初始值(状态),必须设置
  18.     animation.fromValue = [NSValue valueWithCGPoint:self.interactView.center];
  19.     // 动画结束值(状态),必须设置
  20.     animation.toValue = [NSValue valueWithCGPoint:self.targetView.center];
  21.    
  22.     // 重复次数
  23.     animation.repeatCount = INT_MAX;

  24.     // 每次动画时间,必须设置
  25.     animation.duration = 1.8;
  26.    
  27.     // 添加到layer,并开始动;必须设置
  28.     [arrowView.layer addAnimation:animation forKey:keyPath];
  29. }
复制代码

上面代码的动画效果


KeyPath 列表
苹果官方链接:KeyPath列表



注意: CoreAnimation是作用于layer,layer并没有frame属性,所以对frame是无效的,可通过positionbounds间接实现

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|粤ICP备19105948号|CC论坛

GMT+8, 2023-3-28 15:50

快速回复 返回顶部 返回列表