核心动画 - 02 旋转 缩放
2015-05-21 本文已影响1972人
大玲_
首先重复一下核心动画的基本步骤:
1.实例化基本动画
2.添加动画属性
3.将动画添加到图层
直接看旋转的代码吧,简单
//1.实例化基本动画
//默认按照Z轴旋转
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
[self.myView.layer setAnchorPoint:CGPointMake(1, 0)];
//2.设置基本属性
//旋转一周2pi
[anim setToValue:@(2 * M_PI)];
//HUGE_VALF 一个非常大的浮点数值,认为无线循环
[anim setRepeatCount:HUGE_VALF];
//动画时长
[anim setDuration:0.5f];
//3.将动画添加到图层
//key可以随意指定 , 判断图层中是否存在该动画
[self.myView.layer addAnimation:anim forKey:@"rotationAnim"];
注意 :
1.修改animationWithKeyPath 和setAnchorPoint(锚点)动画就会发 生很大的变化。锚点会使他的位置发生变化。
2.HUGE_VALF 一个非常大的浮点数值,认为无线循环。
3.注意添加图层时指定了forKey的值,一会会用到,用来判断当前是否有动画执行,如果有暂停,没有继续。
缩放代码
//1.实例化基本动画
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//2.设置基本属性
//fromValue toValue
//从当前大小缩小到一半 然后恢复初始大小
[anim setFromValue:@(1.0)];
[anim setToValue:@(0.5)];
[anim setAutoreverses:YES];
//动画时长
[anim setDuration:0.5f];
//3.将动画添加到图层
[self.myView.layer addAnimation:anim forKey:nil];
当动画开始后在点击 就暂停
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self scaleAnimation];
//判断myview是否旋转 如果已经旋转 就停止
CAAnimation * anim = [self.myView.layer animationForKey:@"rotationAnim"];
NSLog(@"%@",anim);
if (anim) {
//停止动画
[self.myView.layer removeAllAnimations];
}else{
[self rotatopnAnimation];
}
}
这是主要是根据 animationForKey来判断是否有CAAnimation。得到是否正在执行动画。
效果图:
setAnchorPoint 为 1—0.5.gif setAnchorPoint 为 0.5—0.5.gif这两个效果图 是 setAnchorPoint 的值修改 ,来改变相对位置,旁边的log是判断暂停还是开始。
感谢那些让我进步,给我动力的人们,一起加油、一起努力、一起讨论!