【问题标题】:How can I replicate the trashing animation of Mail.app如何复制 Mail.app 的垃圾动画
【发布时间】:2010-09-30 11:56:09
【问题描述】:

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

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

干杯,
大卫

【问题讨论】:

  • 那么,伙计们:没有私有 API 怎么办?
  • 嗨,nutmuggler,如果我在尝试相同的动画,我不知道如何在移动时折叠曲线......如果可能的话,告诉我该怎么做
  • @jeeva haha​​ 我喜欢你随意提及他的名字

标签: iphone cocoa-touch


【解决方案1】:

在动画上使用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"];

注意:代码 sn-p 是从更大的代码库中提取的。我希望它有效:)

【讨论】:

  • 这是使用私有 API。如果 Apple 拒绝您的应用程序包含这些效果,请不要感到惊讶,尤其是如果您的应用程序在操作系统更新后开始表现异常,请不要感到惊讶。我强烈建议你远离这个。
  • 是的,它是一个非常私有的 API,完全不受支持。未知动画类型的后备是淡入淡出效果,因此可以安全地用于内部或开放工具链开发。 App Store 对私有 API 的批准参差不齐,但我怀疑他们会拒绝这种使用。
  • 我的应用中有这个,AppStore 批准它开始销售。可能这不是私有 API。 :-)
  • 值得注意的是,除了字符串 @"suckEffect" 之外,没有什么是私有的。我不确定是否可以将指定未记录的字符串视为私有 API 使用。当然,我个人不希望 Apple 使用私有 API 检测工具来检测这一点。
  • 这真的是很酷的动画。我想问一下你是怎么知道iphone sdk的无证特性的......
【解决方案2】:

只是补充一些信息:

  1. 您可以将“suckEffect”与标准+[UIView setAnimationTransition:forView:cache:] 一起使用。只需将数字 103 传递给 animationTransition 变量。这不会避免您的应用被 Apple 拒绝:p
  2. iPhoneOS 3.x 上不再存在“spewEffect”、“genieEffect”、“unGenieEffect”等。剩下的唯一未记录的过渡是“cube”(--)、“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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我担心我会得到这个答案 :) 我担心的一件事是,过于密切地复制 Apple 的应用程序行为可能会导致他的应用程序因使用私有 API 的指控而被拒绝。另外,我不方便拿起苹果自己的垃圾箱并对其进行修饰,但也许我只是一只害怕的猫。
    • 如果您从已发布的接口创建自己的实现,您无需担心。您可能会收到最初的拒绝,但他们会听取您的回复并最终批准。坦率地说,关于完全拒绝的报道被夸大了。
    • 这是真的(可能是一个很晚的响应).. 大多数应用程序最终以一种或另一种方式进入商店。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      相关资源
      最近更新 更多