CALayer
所属 QuartzCore
框架。
UIView
有交互和显示功能,
CALayer
是用来显示
添加动画三步骤:
- 初始化动画对象
- 修改动画属性值
- 将动画添加到
layer
动画前后,view
的位置是没有变的:因为看到的都是假象,UIView 并没有发生变化
虽然 CALayer 是不响应点击事件的,但是可以设置位置监测:
CGPoint p = [[touches anyObject] locationInView:self.view];
if ([_redLayer.presentationLayer hitTest:p]) {
NSLog(@"1");
}
模型图层和呈现图层
呈现图层:presentationLayer
:返回表示层对象的副本,该对象表示当前在屏幕上显示的层状态。
显式动画和隐式动画区别:
隐式:设置 layer
的 frame
等属性,前后会有动画效果,时间是0.25s
显式:直接通过 CoreAnimation
类设置动画
关键帧动画
的演示(图标抖动效果)
#define angleToRadians(angle) ((angle)/180.0 * M_PI)
// 窗口抖动动画(关键帧动画)
CAKeyframeAnimation *frameAnim = [CAKeyframeAnimation animation];
frameAnim.keyPath = @"transform.rotation"; // 旋转角度
frameAnim.values = @[@angleToRadians(-3), @angleToRadians(3)]; // 角度转弧度,再填一个到-3 的角度就好看了, @angleToRadians(-3),或者设置autoreverse 属性为yes;
frameAnim.autoreverses = YES; // 但是速度变慢了, 再设置一个速度 speed 为 2
frameAnim.speed = 2; // 两倍速度
frameAnim.repeatCount = MAXFLOAT;
[_redLayer addAnimation:frameAnim forKey:nil];