从自动旋转动画中排除UIView

时间:2016-02-04 02:49:00

标签: ios iphone swift uiview orientation

TL; DR

需要保持自转,但是如何排除一个UIView在方向改变时自动旋转,怎么做?

背景故事

我需要在动画期间保持UIView静止,伴随着自转(在方向改变时发生)。类似于iOS相机应用程序处理旋转的方式(即控件在其位置旋转)。

我尝试过的事情

  • false返回shouldAutorotate(),订阅UIDeviceOrientationDidChangeNotification,并尝试分别为每个视图手动处理轮换事件。

    如果您不需要更改任何UIViews的位置,那么效果很好,否则很难确定它应该在哪里结束以及如何在那里实现

  • 在主UIWindow下放置一个非旋转UIWindow,并将主UIWindow背景颜色设置为清除。

    如果它只有一个项目,但我不想管理一堆UIWindows

  • 反向旋转即旋转UIView的方向与旋转方向相反。 不可靠,看起来很奇怪,也是眩晕诱发

  • 覆盖viewWillTransitionToSize方法中的动画。的 失败

  • 还有很多其他难以在此列出的内容,但它们都 失败

问题

可以这样做吗?如果是这样,怎么样?

我支持iOS8 +

更新以下是@Casey's example视图布局/定位的方式:

enter image description here

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并从Apple找到了一些示例,这有助于防止UIView轮换:https://developer.apple.com/library/ios/qa/qa1890/_index.html

但是,如果UIView未放置在屏幕中央,则应手动处理新位置。

答案 1 :(得分:0)

我认为这很难回答的部分原因是因为在实践中它并没有真正意义。

说我制作了一个使用autolayout在纵向和横向中看起来像这样的视图:

standard layout

如果你想像你要问的那样阻止c旋转,你期望最终视图看起来像什么?它会是这3个选项中的一个吗?

wonky layout

没有您想要实现的肖像/风景视图的图形,并且您希望它的动画描述将很难回答您的问题。

您使用NSLayoutConstraint,故事板或基于框架的数学来布置视图吗?你能提供的任何代码都会很棒

答案 2 :(得分:0)

如果您想要与相机应用具有相同效果,请使用尺寸等级(请参阅herehere)。

如果没有,创建包含不旋转的视图控制器的UIWindow有什么问题?以下代码似乎对我有效(UILabel表示您不想旋转的视图)。

   Group[] allGroups = Skype.getContactList().getAllGroups();
   for (Group group : allGroups) {
       System.out.println(group.getId());
   }