2010-10-15 79 views
2

以前有人问过similar question,但我很想知道iPhone SDK的自动旋转功能是否允许我们用另一种转换(例如淡入/淡出)替换替换旋转动画。对于模态视图,我们可以设置modalTransitionStyle,但是没有用于自动旋转的这种属性。iPhone自动旋转:用淡入/淡出替换旋转动画?

如果我不能利用内置功能,我该怎么实现这个功能?

回答

0

还有的willAnimateRotationToInterfaceOrientation:duration:方法,从文档:

此方法的默认实现 什么也不做。如果您 重写此方法,你不应该 覆盖要么 willAnimateFirstHalfOfRotationToInterfaceOrientation:时间: 或 willAnimateSecondHalfOfRotationFromInterfaceOrientation:时间: 方法。

该方法从 动画块中调用,该动画块用于旋转 的视图。您可以覆盖此方法 并使用它来配置 视图旋转期间应发生的其他 动画。例如,您可以使用它来调整内容的缩放级别 ,更改滚动条 的位置,或者修改您的视图的其他动画 属性。

我想你可以在这里修改它,并在– willRotateToInterfaceOrientation:duration:– didRotateFromInterfaceOrientation:之前和之后修改。

这对我来说似乎是低效率和低于标准的,因为它实际上并没有取代过渡。

我会在UIView上做一个类别,其中包括诸如 - willRotateUsingTransition:等方法,并传递一个参数来告诉它淡入淡出,然后将视图的alpha设置为零。在每个子类中覆盖它以包括需要更改其alpha的所有子视图,如果适用的话。当视图即将旋转(使用上述方法)时调用此方法,然后使用清理方法在alpha再次出现时恢复。

编辑:Docs Docs Docs。快速浏览一下,揭示了这种方法:- (void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration,我认为这是不赞成的。作为讨论的一部分,它包含了我之前从文档中发布的第二段的内容。

+0

我试图用这些很多方法来解决这个问题,包括setAnimationDelay,一个/两个步骤的动画等等,没有什么会摆脱实际的旋转。不幸的是,我明白,如果我不使用内置的自动旋转功能,我没有得到我在IB中定义的自动调整控件的好处。不幸的。 – Stride 2010-10-16 00:16:31

+0

啊。这是不幸的。抱歉。 – JoePasq 2010-10-16 00:57:46

0

我通过将自动定向行为附加到隐藏视图,并通过实现我自己的自定义效果来响应相关事件,从而实现了类似的功能。这很麻烦,我不记得所有的细节,但我确实设法对这种行为进行完全控制。

但是我应该说,就我而言,我想控制旋转的实施方式。我希望主要布局保持不变,同时旋转几个子视图。我想不出有一个很好的理由来完全用一个淡入淡出来取代旋转;它只是混淆了用户没有很好的理由。我可以考虑使用淡入淡出效果的唯一原因是您希望切换到完全不同的用户界面,但即使如此,也没有理由抑制旋转效果。

+1

我想,是否有抑制旋转效应的理由是主观的。不幸的是,似乎没有好的技术方法来压制它。 – Stride 2010-10-16 00:19:29

+0

@Stride:穿着感也是主观的,但是没有人穿戴内衣(或者至少,如果他们这样做,他们通常不会试图穿上一个协调良好的衣橱)。在任何情况下,我用指向隐藏视图的技术都可以完全抑制正常的效果,并让你做任何你想做的事情。我最终得到了一个视图控制器,该视图控制器持有相关的方向方法,其视图位于未使用的顶层视图内(即,它不在XIB的主视图树下)。我不知道它是否需要嵌套视图,但那时我已经厌倦了修补,而且它工作。 – 2010-10-16 10:51:55

+0

如果你不告诉我如何着装,我不会告诉你如何着装。 – Stride 2010-10-18 18:35:03