CABasicAnimation学习
2016-08-17 本文已影响25人
a2ebcc3676c1
- 关于CABasicAnimation的详细用法请参考以下文章:
- 这里整理一下关于CABasicAnimation动画封装的思路
- 假如我要实现一个循环渐隐渐出呼吸动画,这里可以用到
opacity
属性。- 第一级封装
- (void)moveOpacityFrom:(float)from to:(float)to useTime:(float)useTime
timeOffset:(float)timeOffset goback:(BOOL)goback repeat:(int)repeat{
CABasicAnimation *animation =[CABasicAnimation animationWithKeyPath:@"opacity"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];//匀速变化
animation.duration = useTime;//一个周期的时间
animation.repeatCount = repeat;//重复次数
animation.removedOnCompletion = (repeat==1?YES:NO);//是否回到初始状态
animation.autoreverses=goback; //是否自动回位(执行逆动画)
animation.timeOffset = timeOffset;//延迟执行
animation.fillMode=kCAFillModeForwards;
animation.fromValue = [NSNumber numberWithFloat:from];
animation.toValue = [NSNumber numberWithFloat:to];
[self.layer addAnimation:animation forKey:@"moveOpacityFrom"];
}
- 上面方法预留了from、to、useTime、timeOffset、goback、repeat等参数,基本上可以完全通过外界控制内部动画执行。
- 第二级封装
//一次透明渐变
- (void)moveOpacityOnceFrom:(float)from to:(float)to useTime:(float)useTime{
[self moveOpacityFrom:from to:to useTime:useTime timeOffset:0 goback:NO repeat:1];
}
//循环渐变透明
- (void)moveOpacityFrom:(float)from to:(float)to useTime:(float)useTime{
[self moveOpacityFrom:from to:to useTime:useTime timeOffset:0 goback:YES repeat:INT_MAX_TIME];
}
- 上面的封装是为个别参数设置了默认值,传入较少参数实现动画效果。
- 第三级封装
- (void)moveOpacityCustomAnimation:(int)repeats{
[self moveOpacityFrom:0.3 to:1 useTime:0.6 timeOffset:0 goback:YES repeat:repeats];//固定变化循环 repeats 次,
}
- 上面完全就是根据需求自定义了。