在 iOS 中,在视图控制器级别处理全屏旋转相当优雅,但如果只想旋转屏幕的一部分,事情就变得有些复杂。
RotateView 提供了一个简单的 UIView 子类,可以放置在任何非旋转屏幕上,并且会自动旋转以匹配设备方向。您还可以指定在纵向/横向方向中应用的偏移量、尺寸和比例,当设备旋转时,视图将自动更新以匹配这些设置。
注意:'支持'意味着库已与该版本进行测试。'兼容'意味着库应该在该操作系统版本上运行(即它不依赖于任何不可用的 SDK 特性),但不再测试兼容性,可能需要微调或错误修复才能正确运行。
RotateView 可与或未经 ARC 自动运行。
要将 RotateView 安装到您的应用中,请将 RotateView.h、.m 文件拖放到您的项目中。然后可以像其他任何视图一样,通过编程或使用 Interface Builder 创建和放置 RotateView 实例。
由于 RotateView 设计用于在禁用旋转的应用中运行,因此它无法使用正常的界面方向方法(因为这些方法始终返回纵向模式)。相反,RotateView 使用它自己的逻辑来确定界面方向,基于当前的设备方向。如果您想与 RotateView 同步其他视图,请使用以下属性
@property (nonatomic, readonly) UIInterfaceOrientation currentOrientation;
这返回 RotateView 的当前方向(只读)。
@property (nonatomic, assign) UIInterfaceOrientationMask supportedOrientations;
这返回 RotateView 实例支持的界面方向,作为一个掩码。您可以覆盖此属性以防止 RotateView 支持某些方向。默认值是 iPad 上的 UIInterfaceOrientationMaskAll,以及 iPhone/iPod Touch 上的 UIInterfaceOrientationMaskAllButUpsideDown。
@property (nonatomic, weak_delegate) IBOutlet id<RotateViewDelegate> delegate;
可选的委托属性可以在您需要更细粒度控制 RotateView 的方向支持时使用,或者如果您想在它即将旋转时收到通知。
RotateView 类有许多属性,可以在旋转时改变其外观。这些属性大致应该是自我解释的,但以下有详细文档。
@property (nonatomic, assign) CGFloat landscapeScale;
@property (nonatomic, assign) CGFloat portraitScale;
这些属性指定了在 RotateView 旋转到横屏或竖屏模式时应用的缩放因子。默认为 1.0。
@property (nonatomic, assign) CGSize landscapeSize;
@property (nonatomic, assign) CGSize portraitSize;
这些属性指定了在 RotateView 旋转到横屏或竖屏模式时应用于其框架的尺寸。默认情况下,这些尺寸与在构建 RotateView 时指定的框架相匹配。请注意,如果您随后通过手动调整大小或使用自动调整大小或自动布局逻辑来调整框架,则需要更新这些值。
@property (nonatomic, assign) CGPoint landscapeOffset;
@property (nonatomic, assign) CGPoint portraitOffset;
这些属性指定了在 RotateView 旋转到横屏或竖屏模式时应用的偏移量。偏移量相对于已旋转的屏幕,因此要在横屏模式下将视图向右偏移 100 个点,您应将 CGPointMake(100, 0) 用作横屏偏移值。默认为 CGPointZero。
- (void)setOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated;
此方法可用于手动设置视图方向。如果已禁用自动旋转或希望覆盖标准行为,这可能很有用。