ios拼图游戏(七)之组合动画以及捕捉动画结束
2016-05-02 00:51
447 查看
实现了点击放大动画后,觉得还是有点单调,且动画效果有点怪,放大的图片总是从主视图的中间出现,不怎么合理,觉得应该从受到点击的拼图的位置开始慢慢移动到中间并逐步放大这个动画才是合理的。
要实现这个动画,需要移动动画和放大动画组合在一起,所以使用CAAnimationGroup类,这个类可以将定义好的单种动画添加到一起实现组合动画,其实现代码如下:
之后想在一组动画结束后,自动关闭视图,需要进行动画结束的动作捕捉,以下为动画动作捕捉函数:
总结完毕,如有错误请指正,谢谢。
要实现这个动画,需要移动动画和放大动画组合在一起,所以使用CAAnimationGroup类,这个类可以将定义好的单种动画添加到一起实现组合动画,其实现代码如下:
-(void)shakeFromTo:(UIView *)DelegateView aimView:(UIView *)aView From:(CGPoint)fromPos fromValue:(CGFloat)FromValue To:(CGPoint)toPos ToValue:(CGFloat)toValue AnimName:(NSString *)name AnimForKey:(NSString *)forKey{ //添加移动动画 CAKeyframeAnimation* animationPos=[CAKeyframeAnimation animationWithKeyPath:@"position"]; animationPos.duration=0.5;//设置动画持续时间 //为数组添加对象 NSMutableArray* valuesPos=[NSMutableArray array]; [valuesPos addObject:[NSValue valueWithCGPoint:fromPos]]; [valuesPos addObject:[NSValue valueWithCGPoint:toPos]]; animationPos.values=valuesPos; //添加放大动画 CAKeyframeAnimation* animationTra=[CAKeyframeAnimation animationWithKeyPath:@"transform"]; animationTra.duration=0.5;//设置动画持续时间 NSMutableArray* valuesTra=[NSMutableArray array]; //为数组添加对象 [valuesTra addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(FromValue, FromValue, 1.0)]]; [valuesTra addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(toValue, toValue, 1.0)]]; animationTra.values=valuesTra; //[aView.layer addAnimation:animationPos forKey:nil]; //[aView.layer addAnimation:animationTra forKey:nil]; //设置多组动画效果 CAAnimationGroup *group=[CAAnimationGroup animation]; group.duration=0.5f; /////关键必须指向本视图否则动画结束后不会调用本视图的animationDidStop// 4000 / group.delegate=DelegateView; /////关键必须指向本视图否则动画结束后不会调用本视图的animationDidStop/// [group setValue:name forKey:forKey];//设置属性并赋值 [group setAnimations:[NSArray arrayWithObjects:animationTra,animationPos, nil]]; [aView.layer addAnimation:group forKey:name]; }解释一下DelegateView,name,forKey这三个参数。DelegateView是设置代理的对象,用于添加了该动画后的对象能够调用相关的代理函数实现某些动作,而name是该组动作的名称,forkey是该组动作新增加的属性,用于对它们进行动作捕捉,setValue的作用可以去搜索KVC获取更详细的介绍。
之后想在一组动画结束后,自动关闭视图,需要进行动画结束的动作捕捉,以下为动画动作捕捉函数:
//动画结束后执行 -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{ if(flag){ NSString* animationName=[anim valueForKey:@"shakeToDisappear"]; if([animationName isEqualToString:@"shake"]){ //添加内容 } } }当flag为YES时即动画结束,然后获取动画关键字为“shakeToDissapear”的动画名字,并判断该名字是否为“shake”,如果是那么继续执行后面的代码,否则结束函数。
总结完毕,如有错误请指正,谢谢。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android实现定制返回按钮动画效果的方法
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- jQuery实现动画效果circle实例
- HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- 基于javascript实现漂亮的页面过渡动画效果附源码下载