IOS每日学习7.31 IOS动画之CoreAnimation

ios的Core Animation 是基于CALayer,依赖CAAnimation类实现的。

CAAnimation分为以下几类

1.CABasicAnimation  基础动画

2.CAKeyframeAnimation 关键帧动画

3.CAAnimationGroup 动画组

分别说这几类。

CABasicAnimation使用方法是如下:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale”];//比例缩放

animation.fromValue = [NSNumber numberWithFloat:1.0];

animation.toValue = [NSNumber numberWithFloat:2.0];

animation.autoreverses = YES;   

animation.fillMode = kCAFillModeForwards;   

animation.removedOnCompletion = NO;

animation.repeatCount = MAXFLOAT; 

animation.duration = 1.0;


这个keypath的值很关键,它决定了动画在layer的那个属性上进行的。常用的还有以下属性,比如opacity透明度,position位置等。

fromValue代表动画的起始状态值,toValue代表动画结束状态值。

autoreverse 动画结束时是否执行逆动画

duration代表动画时长

removedOnCompletion和fillMode两个属性设置可以防止动画结束时回到原始状态

fillMode属性要生效,必须将removedOnCompletion的值设置为NO。

下面是fillMode各个值得含义:

kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态

kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态

kCAFillModeBackwards 这个和kCAFillModeForwards是相对的,就是在动画开始前,你只要将动画加入了一个layer,layer便立即进入动画的初始状态。因为有可能出现fromValue不是目前layer的初始状态的情况,如果fromValue就是layer当前的状态,则这个参数就没太大意义。

kCAFillModeBoth 理解了上面两个,这个就很好理解了,这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态.


CAAnimationGroup这个类可以同时执行多个动画,也就是组合动画

ABasicAnimation*positionAnima = [CABasicAnimationanimationWithKeyPath:@"position.y"];positionAnima.fromValue= @(self.imageView.center.y);positionAnima.toValue= @(self.imageView.center.y-30);positionAnima.timingFunction= [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn];CABasicAnimation*transformAnima = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.y"];transformAnima.fromValue= @(0);transformAnima.toValue= @(M_PI);transformAnima.timingFunction= [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];CAAnimationGroup*animaGroup = [CAAnimationGroupanimation];animaGroup.duration=2.0f;animaGroup.fillMode= kCAFillModeForwards;animaGroup.removedOnCompletion=NO;animaGroup.animations= @[positionAnima,transformAnima];[self.imageView.layeraddAnimation:animaGroup forKey:@"Animation"];

如果想获取动画结束事件,可以设置动画的代理,然后实现animationDidStart和animationDidStop方法即可

你可能感兴趣的:(IOS每日学习7.31 IOS动画之CoreAnimation)