有没有办法让单个视图不旋转?
Is there a way to have a single view not rotate?
我正在尝试创建一个不随设备方向旋转的视图。我只想让这个视图不旋转,因为我有一个不想旋转的 UIToolbar。这可能吗?如果是这样,我该如何实施?我正在使用 Swift。另外,是否可以在 UIToolbar 上以设备方向旋转 UIBarButtonItems?如果是这样,我该如何实施?重申一下:我希望其中的视图和工具栏不随方向旋转;我希望工具栏上的按钮随方向旋转。谢谢。
根据视图控制器编程指南
如果您想暂时禁用自动旋转,请避免操纵方向蒙版来执行此操作。相反,覆盖初始视图控制器上的 shouldAutorotate 变量。在执行任何自转之前调用此方法。如果returns NO,则旋转被抑制。
因此您需要子class 'UINavigationController',实施 shouldAutorotate 并在故事板中使用您的导航控制器class。
Swift 3
override var shouldAutorotate: Bool {
let currentViewController = self.topViewController
return !currentViewController.isKind(of: DetailViewController.classForCoder())
}
为什么不根据需要将相关视图旋转 -90 度或 +90 度?如果您愿意,我很乐意提供示例代码。
编辑:
我的建议是这样的(但请查看代码后的警告):
let degrees = 90.0 // or -90, 180 depending on phone's movement.
let rotatedView: UIView = <yourOriginalView>
rotatedView.transform = CGAffineTransform = CGAffineTransform(rotationAngle: degrees * CGFloat(M_PI / 180))
在 iOS 8.0 及更高版本中,转换 属性 不会影响自动布局。自动布局根据未转换的框架计算视图的对齐矩形。 -- 因此,如果您使用的是自动布局,这可能无法满足您的目的……我承认这是一个问题。
我看到了两种可能性,更喜欢第二种,因为它不会两次旋转您的视图。我将使用术语 static view 表示您不想旋转的单个视图(= UIToolbar)。
可能性 1
订阅设备方向更改。然后,当方向改变并且 UI 旋转时,将 static view 沿相反方向旋转。
例如,当您收到设备顺时针旋转 90° 的通知时:
- 整个用户界面(包括静态视图)会自动逆时针旋转90°
- 将静态视图顺时针旋转 90°,以取消自动旋转行为。
可能性 2
禁用自动旋转行为,然后手动旋转除您不想旋转的视图之外的所有视图。一次旋转多个视图:将它们放在自定义视图中并旋转该自定义视图。这是一个分步指南:
在视图控制器中禁用自动旋转。通过覆盖 ViewController 的 shouldAutoRotate variable.
来做到这一点
在界面生成器中:将除静态视图之外的所有内容都放在自定义 UIView 中。
Observe device orientation changes 并在设备方向改变时旋转状态栏和您的自定义视图(您在第 2 步中创建)。
swift 中的示例实现可在以下位置找到:GitHub/Dev1an/Static iOS toolbar
旋转视图
"how to rotate views"这个问题请看:
我使用了此处所有答案以及此 post 中的信息来找到我的问题的答案。我在我的 MainViewController.swift 文件中创建了一个 MainNavigationController
class,然后像这样覆盖了 shouldAutorotate
:
import UIKit
class MainNavigationController: UINavigationController {
override var shouldAutorotate: Bool {
return false }
}
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
最后一步是进入我的 Main.storyboard 文件,单击视图的导航控制器,并将其 class 更改为 MainNavigationController
。一旦我这样做了,它就完美地工作了。感谢所有回答这个问题的人。
直截了当。您应该简单地覆盖 shouldRotate
变量并将其设置为 false 以防止在 VC 中旋转。
已更新 - Swift 3
override var shouldAutorotate: Bool {
return false
}
我正在尝试创建一个不随设备方向旋转的视图。我只想让这个视图不旋转,因为我有一个不想旋转的 UIToolbar。这可能吗?如果是这样,我该如何实施?我正在使用 Swift。另外,是否可以在 UIToolbar 上以设备方向旋转 UIBarButtonItems?如果是这样,我该如何实施?重申一下:我希望其中的视图和工具栏不随方向旋转;我希望工具栏上的按钮随方向旋转。谢谢。
根据视图控制器编程指南
如果您想暂时禁用自动旋转,请避免操纵方向蒙版来执行此操作。相反,覆盖初始视图控制器上的 shouldAutorotate 变量。在执行任何自转之前调用此方法。如果returns NO,则旋转被抑制。
因此您需要子class 'UINavigationController',实施 shouldAutorotate 并在故事板中使用您的导航控制器class。
Swift 3
override var shouldAutorotate: Bool {
let currentViewController = self.topViewController
return !currentViewController.isKind(of: DetailViewController.classForCoder())
}
为什么不根据需要将相关视图旋转 -90 度或 +90 度?如果您愿意,我很乐意提供示例代码。 编辑: 我的建议是这样的(但请查看代码后的警告):
let degrees = 90.0 // or -90, 180 depending on phone's movement.
let rotatedView: UIView = <yourOriginalView>
rotatedView.transform = CGAffineTransform = CGAffineTransform(rotationAngle: degrees * CGFloat(M_PI / 180))
在 iOS 8.0 及更高版本中,转换 属性 不会影响自动布局。自动布局根据未转换的框架计算视图的对齐矩形。 -- 因此,如果您使用的是自动布局,这可能无法满足您的目的……我承认这是一个问题。
我看到了两种可能性,更喜欢第二种,因为它不会两次旋转您的视图。我将使用术语 static view 表示您不想旋转的单个视图(= UIToolbar)。
可能性 1
订阅设备方向更改。然后,当方向改变并且 UI 旋转时,将 static view 沿相反方向旋转。
例如,当您收到设备顺时针旋转 90° 的通知时:
- 整个用户界面(包括静态视图)会自动逆时针旋转90°
- 将静态视图顺时针旋转 90°,以取消自动旋转行为。
可能性 2
禁用自动旋转行为,然后手动旋转除您不想旋转的视图之外的所有视图。一次旋转多个视图:将它们放在自定义视图中并旋转该自定义视图。这是一个分步指南:
在视图控制器中禁用自动旋转。通过覆盖 ViewController 的 shouldAutoRotate variable.
来做到这一点
在界面生成器中:将除静态视图之外的所有内容都放在自定义 UIView 中。
Observe device orientation changes 并在设备方向改变时旋转状态栏和您的自定义视图(您在第 2 步中创建)。
swift 中的示例实现可在以下位置找到:GitHub/Dev1an/Static iOS toolbar
旋转视图
"how to rotate views"这个问题请看:
我使用了此处所有答案以及此 post MainNavigationController
class,然后像这样覆盖了 shouldAutorotate
:
import UIKit
class MainNavigationController: UINavigationController {
override var shouldAutorotate: Bool {
return false }
}
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
最后一步是进入我的 Main.storyboard 文件,单击视图的导航控制器,并将其 class 更改为 MainNavigationController
。一旦我这样做了,它就完美地工作了。感谢所有回答这个问题的人。
直截了当。您应该简单地覆盖 shouldRotate
变量并将其设置为 false 以防止在 VC 中旋转。
已更新 - Swift 3
override var shouldAutorotate: Bool {
return false
}