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

nut*_*ler 38 iphone cocoa-touch

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

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

干杯,
戴维德

rpe*_*ich 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"];
Run Code Online (Sandbox Code Playgroud)

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

  • 这是使用私有API.如果Apple拒绝您的应用程序包含这些效果,请不要感到惊讶,特别是如果您的应用程序在操作系统更新后开始表现异常,请不要感到惊讶.我强烈建议你远离这个. (16认同)
  • 这真是很酷的动画.我想问你怎么知道iphone sdk的无证功能...... (4认同)
  • 我在我的应用程序上有这个,AppStore批准它在销售.可能这不是私有API.:-) (2认同)

ken*_*ytm 11

只是添加一些信息:

  1. 您可以使用标准的"suckEffect" +[UIView setAnimationTransition:forView:cache:].只需将数字103传递给animationTransition变量即可.这不会避免Apple拒绝您的应用程序:p
  2. iPhoneOS 3.x上不再存在"spewEffect","genieEffect","unGenieEffect"等.剩下的唯一未记录的过渡是"立方体"( - ),"rippleEffect"(110),三个"cameraIris"效果(105,106,107)和"suckEffect"(103).

有关详细信息,请参阅http://www.iphonedevwiki.net/index.php?title=UIViewAnimationState.

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


Bra*_*son 10

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

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

  • 如果要从已发布的接口创建自己的实现,则无需担心.您可能会收到初步拒绝,但他们会听取您的回复并最终批准.坦率地说,关于完全拒绝的报道被夸大了. (4认同)

jan*_*isz 5

我不确定这是否是一个答案,但这里是具有“精灵效果”的库,因此它与您想要实现的目标非常相似。

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

精灵在