如何复制Mail.app的垃圾动画

时间:2009-01-09 13:53:40

标签: iphone cocoa-touch

在我的iPhone应用程序中,我在UIToolBar中放置了UIBarButtonSystemItemTrash类型的UIBarBUtton。按下时,我想复制Mail.app的动画:bin打开,UIView折叠并飞进去。
有没有办法通过iPhone SDK访问这个动画?

目前我正在使用定制动画,但有一些限制;例如,我无法为bin本身设置动画。 你有什么建议吗?代码示例?

干杯,
的Davide

4 个答案:

答案 0 :(得分:35)

在动画上使用suckEffect类型。另外:spewEffect,genieEffect,unGenieEffect,twist,tubey,swirl,cameraIris,cameraIrisHollowClose,cameraIrisHollowOpen,rippleEffect,charminUltra,zoomyIn和zoomyOut。在模拟器中不起作用。

CATransition *animation = [CATransition animation];
animation.type = @"suckEffect";
animation.duration = 2.0f;
animation.timingFunction = UIViewAnimationCurveEaseInOut;
view.opacity = 1.0f;
[view.layer addAnimation:animation forKey:@"transitionViewAnimation"];

注意:代码段是从较大的代码库中提取的。我希望它有效:)

答案 1 :(得分:11)

只是添加一些信息:

  1. 您可以将“suckEffect”与标准+[UIView setAnimationTransition:forView:cache:]一起使用。只需将数字103传递给 animationTransition 变量即可。这不会避免Apple拒绝您的应用:p
  2. 在iPhoneOS 3.x上不再存在
  3. “spewEffect”,“genieEffect”,“unGenieEffect”等。唯一没有记录的过渡是“立方体”( - ),“rippleEffect”(110),三个“cameraIris”效果(105,106,107)和“suckEffect”(103)。
  4. 有关详细信息,请参阅http://www.iphonedevwiki.net/index.php?title=UIViewAnimationState

    另外,要为bin设置动画(使用私有API):http://www.iphonedevwiki.net/index.php?title=UIToolbar#Animating_the_trash_can_icon

答案 2 :(得分:10)

不幸的是,我认为这需要一个完全自定义的动画。 UIView折叠可以使用Core Animation进行近似,也许可以通过向UIView底层的CATransform3D添加透视来将UIView扭曲成一个被吸入垃圾桶的梯形。

就垃圾桶而言,您可以使用initWithCustomView:创建一个UIBarButtonItem,这可能允许您插入具有可动画垃圾桶的自定义UIView。它看起来像垃圾桶有两个元素,罐底和盖子,它们独立旋转以打开和关闭罐头。为两者绘制PNG,为它们创建UIImageViews,并使它们成为UIBarButtonItem自定义视图的子视图。对于打开和关闭,将旋转变换应用于它们以设置子视图的动画。

答案 3 :(得分:4)

我不确定这是否是一个答案,但here是lib,它具有“精灵效应”,所以它与你想要实现的非常相似。

CGRect endRect = CGRectMake(30, 40, 50, 60);
[view genieInTransitionWithDuration:0.7 
                    destinationRect:endRect 
                    destinationEdge:BCRectEdgeTop 
                         completion:^{
                            NSLog(@"I'm done!");
                          }];

Genie IN