: radius * 2) let path = CGPath(ellipseIn: boundingRect, transform: nil) 深B做动画 ---- let animation = CAKeyframeAnimation
6 imageView.image = UIImage(named:“star”) 7 self.view.addSubview(imageView) 8 9 let animation = CAKeyframeAnimation
CAAnimaton动画分为CABasicAnimation & CAKeyframeAnimation CABasicAnimation动画, 顾名思义就是最基本的动画, 老规矩先上代码: //1.先创建一个要执行动画的 关键帧动画 相比BasicAnimation, KeyframeAnimation更为灵活, 可以设置多段动画 一样上代码先 CAKeyframeAnimation *keyframeAnimation = ({ CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position *keyframeAnimation = ({ CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath 动画 CAKeyframeAnimation *keyframeAnimation = ({ CAKeyframeAnimation *animation = [CAKeyframeAnimation
代码如下: CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; animation.beginTime animation.values = values; [self.circleView.layer addAnimation:animation forKey:nil]; CAKeyframeAnimation *animation2 = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; animation2.duration = duration animation2.delegate = self; [self.circleView.layer addAnimation:animation2 forKey:nil]; CAKeyframeAnimation * animation3 = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; animation3.duration = duration
CAKeyframeAnimation CAKeyframeAnimation是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation 1.1 创建一个抖动的小方块 我们用一个简单的demo来感受一下CAKeyframeAnimation,来做一个会抖动的小方块。 ? 抖动的小方块.gif CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z //创建动画对象 CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position - (CAKeyframeAnimation *)maskAni{ // 放大缩小视图,keypath使用bounds CAKeyframeAnimation *maskAni = [
4、CABasicAnimation和CAKeyframeAnimation CABasicAnimation和CAKeyframeAnimation都是CAPropertyAnimation的子类,这两类动画有着相似的地方 CABasicAnimation可以看成是只有两个点的特殊的CAKeyFrameAnimation动画 这其中主要的参数有: 属性 解释 duration 动画的持续时间 repeatCount 独有) keyTimes 上面values设定了路径上的关键点,本参数则设定关键点之间的路径段上所需的时间,所以keyTimes的个数应该比values的个数小1(CAKeyframeAnimation 独有) timingFunctions 同上keyTimes的含义,及设置每一小段路径上的动画的变化速率(CAKeyframeAnimation独有) path 可以直接设置动画路径(CAKeyframeAnimation 就会有左右摇摆的效果了. */ //图标抖动代码实现 - (void)values{ //创建一个帧动画 CAKeyframeAnimation *anim = [CAKeyframeAnimation
Core Animation Core Animation是一组非常强大的动画处理API,它的子类主要有4个:CABasicAnimation、CAKeyframeAnimation、CATransition CAKeyframeAnimation CAKeyframeAnimation和CABaseAnimation都属于CAPropertyAnimatin的子类。 CABaseAnimation只能从一个数值(fromValue)变换成另一个数值(toValue),而CAKeyframeAnimation则会使用一个NSArray保存一组关键帧。 values属性应用 -(void)setUpCAKeyframeAnimationUseValues { CAKeyframeAnimation *animation = [CAKeyframeAnimation *animation = [CAKeyframeAnimation animation]; animation.keyPath = @"position"; CGMutablePathRef
Core Animation Core Animation是一组非常强大的动画处理API,它的子类主要有4个:CABasicAnimation、CAKeyframeAnimation、CATransition CAKeyframeAnimation CAKeyframeAnimation和CABaseAnimation都属于CAPropertyAnimatin的子类。 CABaseAnimation只能从一个数值(fromValue)变换成另一个数值(toValue),而CAKeyframeAnimation则会使用一个NSArray保存一组关键帧。 values属性应用 -(void)setUpCAKeyframeAnimationUseValues { CAKeyframeAnimation *animation = [CAKeyframeAnimation *animation = [CAKeyframeAnimation animation]; animation.keyPath = @"position"; CGMutablePathRef
CAKeyframeAnimation *upDownAnimation; upDownAnimation = [CAKeyframeAnimation animationWithKeyPath CAKeyframeAnimation *opacityAnimation; opacityAnimation = [CAKeyframeAnimation animationWithKeyPath *positionAnimate = [CAKeyframeAnimation animationWithKeyPath:@"position"]; positionAnimate.repeatCount 实现,设定好初始、中间、结束状态,动画时间已经重复次数,并添加到layer,完成旋转效果; CAKeyframeAnimation* rotationAnimation; rotationAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation.values =
*anima = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];//在这里@"transform.rotation" CAKeyframeAnimation关键帧动画 5.1 关键点的数组形式 //根据values移动的动画 CAKeyframeAnimation *catKeyAnimation = *animation1 = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; animation1.values = *animation2 = [CAKeyframeAnimation animationWithKeyPath:@"position"]; UIBezierPath *bezierPath = = [CAKeyframeAnimation animation]; animation.keyPath = @"position"; CGMutablePathRef path =
创建CAKeyframeAnimation实例, 并设置keypart/duration/values 相比基本动画只能设置开始和结束点, 关键帧动画能添加多个动画路径点 #3. redColor].CGColor; 6 7 [self.view addSubview:showView]; 8 9 //创建关键帧动画 10 CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation]; 11 12 //设置动画属性 13 keyFrameAnimation.keyPath redColor].CGColor; 6 7 [self.view addSubview:showView]; 8 9 //创建关键帧动画 10 CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation]; 11 12 //设置动画属性 13 keyFrameAnimation.keyPath
显示动画基类CAAnimation,能用的动画类只有CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup。 CALayer层动画(CABasicAnimation,CAKeyframeAnimation) 接下来我会根据简单到复杂的顺序解释如何使用这些动画,注意事项和分析什么时候使用他们。 动画对象的基类 CAAnimationGroup:组合动画 CATransition:转场动画 CAPropertyAnimation:属性动画 常用的动画CABasicAnimation,CAKeyframeAnimation CAKeyframeAnimation(关键帧动画)的使用 参考:http://www.jianshu.com/p/b05986ded337 注意事项 1.因为修改的是layer层参数,而不是我们平常使用的 2.CAKeyframeAnimation一般是有多个帧动画的时候使用, 但是每个帧之间是匀速的,或者是一些其他规律变化的时候使用。
以下是用 CAKeyframeAnimation 动画组来实现的方案: - (void)startKeyAnimation { if (! *showAni = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; showAni.duration = 0; showAni.values *baseAni = [CAKeyframeAnimation animationWithKeyPath:@"position"]; baseAni.duration = moveDuration *hideAni = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; hideAni.duration = pauseDuration *showAni = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; showAni.duration = 0; showAni.values
可以看做特殊的CAKeyFrameAnimation CAKeyframeAnimation 关键帧动画,可定制度比CABasicAnimation高,也是本系列的接下来的内容 CAAnimationGroup 组动画,支持多个CABasicAnimation或者CAKeyframeAnimation动画同时执行 下面链接的文章能帮助大家很好的学习 CAAnimation! * animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; animation.path = path.CGPath 三: CABasicAnimation和CAKeyframeAnimation: CABasicAnimation基本动画,做一些简单效果 CAKeyframeAnimation帧动画,做一些连续的流畅的动画。
动画效果.gif 整个核心动画就不多做介绍了,随便一搜就能有很多很详细的解释,主要使用以下四种 CABasicAnimation //经典动画 CAKeyframeAnimation 分解 看做两个view 一个是播放面板的小圆 一个是整个控制面板 播放面板的曲线运动 使用核心动画中的 CAKeyframeAnimation 播放面板的变大缩小、控制面板消失出现 使用CABasicAnimation kStartRadius, 0 ) controlPoint2:CGPointMake(self.frame.size.width * 1.3, self.frame.size.height/2)]; CAKeyframeAnimation *anmiation0 = [CAKeyframeAnimation animationWithKeyPath:@"position"]; anmiation0.path = path.CGPath
4.2:关键帧动画(CAKeyframeAnimation) CAKeyframeAnimation和CABaseAnimation都属于CAPropertyAnimatin的子类。 CABaseAnimation只能从一个数值(fromValue)变换成另一个数值(toValue),而CAKeyframeAnimation则会使用一个NSArray保存一组关键帧。 效果演示: 圆形路径动画代码演示: CAKeyframeAnimation *anima = [CAKeyframeAnimation animationWithKeyPath:@"position [_demoView.layer addAnimation:anima forKey:@"pathAnimation"]; 说明:CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation 重要属性 animations : 用来保存一组动画对象的NSArray 效果演示: 组动画代码演示: CAKeyframeAnimation *anima1 = [CAKeyframeAnimation
本篇只讲述CABasicAnimation、CAKeyframeAnimation、CAAnimationGroup的使用。 2.CAKeyframeAnimation CAKeyframeAnimation我们一般称为关键帧动画,主要是利用其values属性,设置多个关键帧属性值,来产生动画。 animation.gif CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform values 是CAKeyframeAnimation的属性,设置keyPath属性在几个关键帧的值,也是id类型的。 keyTimes 也是CAKeyframeAnimation的属性,每个值对应相应关键帧的时间比例值。
ViewController -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 1.创建核心动画 CAKeyframeAnimation * kfr = [[CAKeyframeAnimation alloc]init]; // 2.创建核心动画的类型 kfr.keyPath = @”transform.rotation
和 kCAFillModeBackwards的组合状态 */ // 添加动画 [view.layer addAnimation:transformAnima forKey:@"A"]; CAKeyframeAnimation 关键帧动画 // 关键帧动画 // 指定动画需要修改的属性 CAKeyframeAnimation *keyFrameA = [CAKeyframeAnimation animationWithKeyPath rectRunAnimation forKey:@"rectRunAnimation"]; self.rectLayer = rectLayer; } // 抖动示例 // 创建帧动画对象 CAKeyframeAnimation *anim = [CAKeyframeAnimation animation]; // 设置动画属性 anim.keyPath = @"transform.rotation"; anim.values 图来了 CAKeyframeAnimation.gif 其实关键帧动画相对来说可能会作出比较复杂的效果,使用方法很简单,只是复杂的动画会使用到算法,可能稍微需要思考。
---- CAKeyframeAnimation 刚才也忘了说了,其实CABasicAnimation和CAKeyframeAnimation都是继承自CAPropertyAnimation。 CAKeyframeAnimation * animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; animation.values 这个属性是CAKeyframeAnimation独有的属性。 CAKeyframeAnimation * animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; animation.values CAKeyframeAnimation * animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; animation.values