iOS动画-transform

2019-12-11  本文已影响0人  棒棒德

参考链接: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)

上一篇 下一篇

猜你喜欢

热点阅读