我知道有很多关于它的帖子,但我找不到最好的解决方案。
我有一个“持有者”视图(UIView),其中包含许多在横向模式下水平拉伸的scrollView。每个滚动视图都包含视图,其中包含垂直滚动的图像。同样,整个事情都在景观中。
我想要的是,当我旋转到纵向模式时,包含所有内容的“持有者”视图保持不变,意味着现在是一列,滚动视图旋转意味着滚动是水平的,但滚动视图的内容(包含图像的视图)旋转。
我尝试编写一个UIView子类(用于“holder”视图)并使用以下方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
就像我希望处理驻留在我的“持有人”视图中的子视图一样,但这不起作用。什么是最好的方式?感谢。
答案 0 :(得分:1)
您可以设置支持的方向是您想要的方向,并观察UIDevice
方向更改以手动处理其他方向。这里有一个例子:
#import "ViewController.h"
@interface ViewController ()
- (void)deviceDidRotate:(NSNotification *)notification;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceDidRotate:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
#pragma mark - Private methods
- (void)deviceDidRotate:(NSNotification *)notification {
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
/* Handle manually the rotation
For instance, apply a transform to a UIView:
CGAffineTransform transform = CGAffineTransformMakeRotation(radians);
self.aView.transform = transform; */
}
@end