iOS动画效果三:CABAsicAnimation实现平移、旋转和放大

iOS动画效果三:CABAsicAnimation实现平移、旋转和放大,第1张

使用CABAsicAnimation来实现动画的放缩和旋转是比较常用的,这篇主要介绍CABasicAnimation实现简单的动画效果

最终的效果图为:

Demo地址

对应的实现文件是SecondViewController

首先,我们先定义一个UIView以及三个button按钮,分别对应平移、放大和旋转

在.h文件中定义相应的属性

之后,在.m文件中实现相应的懒加载

将UIView以及button添加到界面上

之后,我们先来实现平移动画,实现下面的方法

这里面遇到挺多坑的,下面逐条说明一下

接下俩,我们类似添加相应的放大和旋转的动画效果

这样,我们就完成了CABasicAnimation实现平移、放大和旋转的动画效果

这种动画效果使用挺多的

另外,我们阅读苹果开发文档时,我们可以看到协议CAAnimationDelegate,通过这个协议我们可以观察动画的开始和结束。

在平移动画中,让CABasicAnimation遵守这个协议

实现相应的协议方法

比较重要的是,我们通过协议方法可以判断动画是否正常完成还是被打断,这个我以前就碰到过动画过程被UITableView 的reloadData打断,导致动画表现异常,具体可以看下这篇文章

CAnimationGroup动画执行时间比duration小

)

最终效果图为:

Demo地址

我写的同一系列的其他文章

iOS开发中动画效果的探究(一)

iOS动画效果的探究二:UIView Animation实现动画

iOS动画效果三:CABAsicAnimation实现平移、旋转和放大

ios动画效果四:使用Pop框架实现d簧效果

iOS动画效果五:CABasicAnimation实现绕定点旋转的效果 ]

iOS动画效果六:实现自定义的push转场动画

iOS动画效果七:实现自定义present转场动画效果

iOS动画效果八:实现类似系统的测滑返回效果

CAAnimation:核心动画的基础类,不能直接使用,负责动画运行时间、速度的控制,本身实现了CAMediaTiming协议。

CAPropertyAnimation:属性动画的基类(通过属性进行动画设置,注意是可动画属性),不能直接使用。

CAAnimationGroup:动画组,动画组是一种组合模式设计,可以通过动画组来进行所有动画行为的统一控制,组中所有动画效果可以并发执行。

CATransition:转场动画,主要通过滤镜进行动画效果设置。

CABasicAnimation:基础动画,通过属性修改进行动画参数控制,只有初始状态和结束状态。

CAKeyframeAnimation:关键帧动画,同样是通过属性进行动画参数控制,但是同基础动画不同的是它可以有多个状态控制。

基础动画、关键帧动画都属于属性动画,就是通过修改属性值产生动画效果,开发人员只需要设置初始值和结束值,中间的过程动画(又叫“补间动画”)由系统自动计算产生。和基础动画不同的是关键帧动画可以设置多个属性值,每两个属性中间的补间动画由系统自动完成,因此从这个角度而言基础动画又可以看成是有两个关键帧的关键帧动画。

**注意点** 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。

在实际项目中很多需求使用UIView动画或者基本动画就可以实现,比如下面比较常用的缩放和d性动画效果

如果想实现更炫酷一点的动画,如雷达,波纹,咻一咻效果,时钟,带动画的指示器等就需要用到UIBezierPath和CAShapeLayer,CAReplicatorLayer等知识。

下面简单的说一下CAShapeLayer和CAReplicatorLayer

//波纹,咻一咻,雷达效果

//利用UIBezierPath和CAShapeLayer实现不规则的图形,并带有动画效果,可以在折线图中使用

-(void)myTest{

UIView *line=[[UIView alloc] initWithFrame:CGRectMake(0, 100, 400, 1)]

line.backgroundColor=[UIColor grayColor]

[self.view addSubview:line]

}

-(void)clickk:(UITapGestureRecognizer *)tap{

CGPoint point=[tap locationInView:_testView1]

if ([_path containsPoint:point]) {

NSLog(@"点击不规则图形")

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11620953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存