我有一个UIViewController,它覆盖视图上的控件,显示相机看到的内容。我有几个想要允许的场景。
对于iPad ,无论设备的旋转方向如何,我都希望用右手拇指将控件放在设备的最右边上。 控件应旋转其内容,以使其顶部始终向上(远离地面)。我根本不希望相机视图旋转,因为那只是愚蠢的 - 它的位置和放大器。尺寸应保持不变,其内容也不应旋转。
对于iPhone ,我想将控件保留在设备屏幕的底部,按住主页按钮,无论主页按钮实际是哪里。 控件应旋转其内容,以便向上始终指向上方。同样,我不希望相机视图的框架或内容参与任何视图旋转动画。
我正在使用自动布局。
我想知道是否有任何方法可以在故事板中描述部分或全部内容。特别是,能够描述某些视图位置需要自动旋转(即iPad上的控件),但其他视图不需要(相机视图),这很棒。
A question from 2011表示当时不可能这样做,但也许事情已经发生了变化?如果它没有得到直接支持,你能否提出一个方法,是否有一些合理的地方可以用来实现自动旋转?
答案 0 :(得分:0)
好的,这不是一个完整的答案,但我尝试了一些看起来很有希望的事情。
首先,您可以使用大小说明符为纵向与横向创建一组单独的约束:landscape is w Regular,h Any;肖像是w任何,h常规(我认为 - 仔细检查这些)这可以通过故事板视图底部中心的弹出控件访问。通过为纵向和横向安装不同的约束,应该可以缩放控件容器视图的宽度和高度,使其看起来处于一个恒定的位置w.r.t.设备方向;换句话说,容器实际上并不反向旋转 - 它会缩放,因此它有效地看起来就像它有反向旋转一样。
我接近工作了。看起来它在故事板视图中做了正确的事情,但是当我实际运行它时,我得到有关冲突约束的调试消息。不知道如何解决这个问题,但也许可以使用约束优先级?这有时会有所帮助。
我(部分)尝试的第二件事是创建一个自定义容器视图类,它根据设备方向(在UIDevice类中)将自身反向旋转到正确的位置。您可以通过覆盖layoutSubviews来实现此功能。对于每个方向,您可以定义一个将其置于正确位置的变换,并设置视图的变换属性。
另一种可能的解决方案是覆盖视图控制器中的updateConstraints,并添加/删除约束以将容器定位/缩放到每个方向的正确位置。
对于所有这些,想法是你“强迫”容器在正确的位置,但仅留下子视图(实际控件)。如果控件的约束与容器视图的特定方向无关,则控件应该正确。
所以,无论如何,这些都是一些想法......如果他们引导你找到实际的解决方案,你能发布吗?我预计自己需要这个。