核心动画
CoreAnimation(框架名)
CALayer(图层,用来展示)
|
CAAnimation(处理动画的类,不能直接使用是一个基类)
|
CAPropertyAnimation(属性动画,通过属性值改变,产生动画效果基类)
| CAAnimationGroup(群组动画,可以同时添加多种动画,达到预期效果)
| CATransition(转场动画,给视图切换的时候添加动画效果)
|
CABasicAnimation(基础动画只能是;两个点之间的变化)
| CAKeyframeAnimation(关键帧动画,可以添加多个点或者路径)
CASpringAnimation:弹簧动画
UIView和CALayer的区别
UIView:可以跟用户交互
CALayer:不可以通用户交互,只能显示内容
UIView:->rootLayer发生改变,自图层也会发生改变
CALayer:发生改变自图层不会发生改变
button不只有一个视图,只是改变了其中一个视图rootLayer——>显示,未被裁切的边框
CALayer本身自带动画效果(当改变属性值得时候)->隐式动画
rootLayer:没有动画效果
可以有隐式动画的效果的属性
bounds 边境范围
position 中心点类似于UIView中的center
zPosition z轴中心点
anchorPoint 锚点 ✮✮✮✮✮
anchorPointZ Z轴锚点
transform 转换形态
frame NO. Animatable 坐标
hidden 隐藏
doubleSided 图层背面是否显示
geometryFlipped 翻转颠倒
masksToBounds 裁切边境
contents 内容
opaque 不透明度
allowsEdgeAntialiasing 是否使用变形后的抗锯齿
backgroundColor 背景颜色
borderWidth 边框宽
borderColor 边框颜色
opacity 不透明度
shadowColor 阴影颜色
shadowOpacity 阴影不透明度
rasterizationScale 防止Retina屏幕像素化
shadowOffset 阴影偏移量
shadowRadius 阴影的半径
#import "ViewController.h"
#define Angle(a) (a)*M_PI/180
//每秒旋转多少度
//旋转的弧度:sAngle*N秒*M_PI/180
#define sAngle 6
@interface ViewController ()
{
CALayer *layer;
}
@property(nonatomic,strong)CALayer *pointerLayer;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
/*
//CALayer的初始化
// CALayer *layer = [[CALayer alloc] init];
layer = [CALayer layer];
// 添加到父图层上可以是addSubstringLayer
layer.frame = CGRectMake(100, 100, 100, 100);
layer.backgroundColor = [[UIColor cyanColor] CGColor];
[self.view.layer addSublayer:layer];
// 图层不能跟用户交互,不能添加响应时间
*/
// NSLog(@"%@",self.pointerLayer);
self.pointerLayer.anchorPoint =CGPointMake(0.5,0.9);
/*
图层需要的颜色(CGColorRef)或者是图片(CGImageRef)都是CG类型
*/
self.pointerLayer.contents = (id)[UIImageimageNamed:@"shizhen"].CGImage;
[selfstart];
[NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(start)userInfo:nilrepeats:YES];
}
- (void)start{
//NSCalendar日历类可以通过日历类,获得年月日时分秒
//NSDateComponents组件
NSCalendar *calendar = [NSCalendarcurrentCalendar];
// fromDate获得那个日期的组件
NSDateComponents *components = [calendarcomponents:NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecondfromDate:[NSDatedate]];
float s = components.second *sAngle;
// 将秒装换成弧度
self.pointerLayer.transform = CATransform3DMakeRotation(Angle(s),0, 0,1);
}
- (CALayer *)pointerLayer{
if (_pointerLayer) {
return_pointerLayer;
}
_pointerLayer = [CALayerlayer];
_pointerLayer.bounds =CGRectMake(0,0, 29,236 );
_pointerLayer.position =self.view.center;
// _pointerLayer.backgroundColor = [[UIColor orangeColor] CGColor];
[self.view.layeraddSublayer:_pointerLayer];
return_pointerLayer;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// UITouch *touch = [touches anyObject];
// layer.position = [touch locationInView:self.view];
//
// CGFloat width = CGRectGetWidth(layer.bounds) != 50 ? 50:100;
// layer.bounds = CGRectMake(0, 0, width, width);
// CGColorRef color = [UIColor brownColor].CGColor != layer.backgroundColor ? [UIColor colorWithRed:0.847 green:0.122 blue:0.868 alpha:1.000].CGColor:[UIColor colorWithRed:0.278 green:1.000 blue:0.027 alpha:1.000].CGColor;
//
// layer.backgroundColor = color;
// layer.shadowRadius = 10;
// layer.shadowOpacity = 30.0;
设置图层圆角的半径
layer.cornerRadius = 40 ;
// layer.cornerRadius = layer.cornerRadius != 50 ? 50:0;
// layer.opacity = 0.25;
// 锚点
// 锚点的最大值是1,1,最小值是0,0
// 默认锚点是于中心点重合的默认值是0.5,0.5
// 设置旋转属性
/*
当试图改变的时候,是以锚点为基准去改变的
锚点的值与位置
0,0在图层的左上角
0,1在左下角
1,0在右上角
1,1在右下角
锚点位置的计算公式
锚点 =锚点在视图上的位置.x.y/视图的宽高
锚点值 =锚点在视图上的位置.x.y/视图的宽高
*/
self.pointerLayer.transform = CATransform3DMakeRotation(Angle(90),0, 0,1);
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// layer.opacity = 1.0;
self.pointerLayer.transform = CATransform3DIdentity;
}