From: http://z251257144.iteye.com/blog/1439928
iPhoto 中想删除某张照片时,点击删除键,就能看到照片被回收到垃圾箱的动画。
今天就来模拟一下这个动画(据说有个私有API可以实现,不过私有的嘛,忽略之)。
首先仔细观察下这个动画,包含了位置,大小还有可见三个主要动画。
为了清楚的说明,先上核心代码:
- UIBezierPath *movePath = [UIBezierPath bezierPath];
- [movePath moveToPoint:fromPoint];
-
- [movePath addQuadCurveToPoint:toPoint
- controlPoint:CGPointMake(toPoint.x,fromPoint.y)];
-
-
- CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
- moveAnim.path = movePath.CGPath;
- moveAnim.removedOnCompletion = YES;
-
- CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
- scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
- scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
- scaleAnim.removedOnCompletion = YES;
-
- CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"alpha"];
- opacityAnim.fromValue = [NSNumber numberWithFloat:1.0];
- opacityAnim.toValue = [NSNumber numberWithFloat:0.1];
- opacityAnim.removedOnCompletion = YES;
-
- CAAnimationGroup *animGroup = [CAAnimationGroup animation];
- animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim,opacityAnim, nil];
- animGroup.duration = 1;
- [imageView.layer addAnimation:animGroup forKey:nil];
UIBezierPath是用来创建各种曲线的类,这个类很强大,各种你能想到的都可以用它来完成。
这里我们建立的二次曲线实际上就是从照片的中心点位置到垃圾箱终点的一条曲线。
至于函数中controlPoint的选取,自己查阅API吧,这里就不多说
接着我们建立了一个CAKeyframeAnimation的动画,这个主要用于实现动画的轨迹变化,我们将动画的path值设为之前定义的曲线值。
这样动画就会按我们设定的轨迹移动了。
接下来是大小变化的动画,设定了最初和最终的画面大小。CATransform3DMakeScale是用于生成变换矩阵的东东,对于二维的,z值始终为1.
紧接着是生成透明度的动画,很好理解。
由于我们用到了三种动画,所以需要用CAAnimationGroup,这样一次性的使用它们。
这样我们就完成了这样的动画,试试吧。

分享到:
相关推荐
在实现iPhoto删除动画时,主要涉及到CALayer对象的属性变化以及CAAnimation的使用。 1. **理解CALayer**:CALayer是Core Animation的基础,代表屏幕上的一个可视化元素。你可以设置其frame、bounds、transform等...
作为“图片动画”系统,iPhoto可能内置了各种图片展示特效,如滑动、缩放、旋转等。这些效果可能通过JavaScript库如jQuery或现代浏览器的CSS3动画来实现,提升用户体验。 5. 数据库设计与存储 系统背后的数据库设计...
这个资源,"ASP.NET-[图片动画]iPhoto多用户相册系统v2.2.zip",显然是一款基于ASP.NET平台的多用户相册系统,版本为2.2,特别强调了对图片和动画的支持。 在ASP.NET中,开发人员可以利用C#或VB.NET等编程语言进行...
【ASP.NET源码——[图片动画]iPhoto多用户相册系统】 ASP.NET是一个由微软开发的开源Web应用程序框架,用于构建动态网站、web应用程序和服务。这个“[图片动画]iPhoto多用户相册系统”是基于ASP.NET的源码实现,它...
【压缩包子文件的文件名称列表】中的 "[图片动画]iPhoto多用户相册系统 v2.2_iphoto" 可能是该系统的安装程序或者更新文件,版本号为2.2,表明这是一次更新或者升级,可能包含了新的功能、性能优化或错误修复。...