参考链接:https://www.jianshu.com/p/02c341c748f9
可以操作view 或者 view的layer
一、操作view
1.使用 @property(nonatomic)CGAffineTransform transform;// view 的属性
view.transform:一般是View的旋转,拉伸移动等属性,是二维的,通常使用都是前缀CGAffineTransform的类。
2.使用方法:
栗子1:
/// 初始状态
view.transform=CGAffineTransformIdentity;
[UIView animateWithDuration:1.0fanimations:^{
//变大两倍
view.transform=CGAffineTransformMakeScale(2.0f,2.0f);
}];
栗子2:
View.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0, 0);///view的大小设置为0
3.当我们改变过一个view.transform属性或者view.layer.transform的时候需要恢复默认状态的话,记得先把他 们重置为:
view.transform=CGAffineTransformIdentity;
4.可以设置的一些属性:
CGAffineTransformIdentity//位移仿射 ---- 理解为平移 (CGFloat tx,CGFloat ty) CGAffineTransformMakeTranslation CGAffineTransformTranslate//旋转仿射 ---- 理解为旋转 (CGFloat angle)CGAffineTransformMakeRotationCGAffineTransformRotate//缩放仿射 --- 理解缩放大小 (CGFloat sx, CGFloat sy)CGAffineTransformMakeScale CGAffineTransformScale
二、操作layer
1.使用 @propertyCATransform3D transform;// layer 的属性
view.layer.transform:可以在3D模式下面的变化,通常使用的都是前缀为CATransform3D的类。
2.使用方法:
使用方法animationWithKeyPath:对 CABasicAnimation进行实例化,并指定Layer的属性作为关键路径进行注册。
//围绕y轴旋转CABasicAnimation*transformAnima=[CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
设定动画
设定动画的属性和说明
属性说明
duration动画的时长
repeatCount重复的次数。不停重复设置为 HUGE_VALF
repeatDuration设置动画的时间。在该时间内动画一直执行,不计次数。
beginTime指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式
timingFunction设置动画的速度变化
autoreverses动画结束时是否执行逆动画
fromValue所改变属性的起始值
toValue所改变属性的结束时的值
byValue所改变属性相同起始值的改变量
栗子1:
//不特殊设置,会回到原始状态
CABasicAnimation*transformAnimation=[CABasicAnimation animationWithKeyPath:@"transform"];transformAnimation.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeScale(2.0,2.0,1.0)];transformAnimation.beginTime=CACurrentMediaTime();transformAnimation.duration=1.0f;transformAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];[view.layer addAnimation:transformAnimation forKey:@"transformAnimation"];
栗子2:
// 不会回到原始状态
view.layer.transform=CATransform3DIdentity;[UIView animateWithDuration:1.0fanimations:^{view.layer.transform=CATransform3DMakeScale(2.0,2.0,1.0);}];
3.控制不会到原始状态:
只需设置removedOnCompletion、fillMode两个属性就可以了。
transformAnima.removedOnCompletion=NO;transformAnima.fillMode=kCAFillModeForwards;
4.可以设置的属性:
CATransform3DIdentity//位移3D仿射 ==> (CGFloat tx, CGFloat ty, CGFloat tz)CATransform3DMakeTranslationCATransform3DTranslation//旋转3D仿射 ==> (CGFloat angle, CGFloat x, CGFloat y, CGFloat z)CATransform3DMakeRotationCATransform3DRotation//缩放3D仿射 ==> (CGFloat angle, CGFloat x, CGFloat y, CGFloat z)CATransform3DMakeScaleCATransform3DScale//叠加3D仿射效果CATransform3DConcat//仿射基础3D方法,可以直接做效果叠加CGAffineTransformMake(sx,shx,shy,sy,tx,ty)//检查是否有做过仿射3D效果 == ((CATransform3D t))CATransform3DIsIdentity(transform)//检查2个3D仿射效果是否相同CATransform3DEqualToTransform(transform1,transform2)//3D仿射效果反转(反效果,比如原来扩大,就变成缩小)CATransform3DInvert(transform)
网友评论