iOS:如何让`uiview`支持纵向和横向?

时间:2016-06-25 07:14:16

标签: ios uiview landscape-portrait

我有photoBroser继承uiview

@interface SDPhotoBrowser : UIView <UIScrollViewDelegate>

但现在我要求photoBroser支持iphone 纵向和横向,以及如何做到这一点?

my photobroser

编辑:在我的应用程序中,我的应用仅支持portrait方向,仅限于photoBrowser uiview,我想支持portrait and landscape方向。

编辑:我应用J.Hunter的答案,他的答案非常好,在实际编码中,我建议更改portrait and landscape orientation的功能。当我解雇我的photoBrowser时,有一个问题,在photoBrowser解雇后,该设备已经landscape orientation,因此我使用下面的代码让我的设备portrait orientation,然后我的photoBrowser解雇,所以有合理的表现。

//(force landscape:[self interfaceOrientation:UIInterfaceOrientationLandscapeRight];)
//(force Portrait:[self interfaceOrientation:UIInterfaceOrientationPortrait];)
+ (void)interfaceOrientation:(UIInterfaceOrientation)orientation
{
    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
        SEL selector  = NSSelectorFromString(@"setOrientation:");
        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
        [invocation setSelector:selector];
        [invocation setTarget:[UIDevice currentDevice]];
        int val = orientation;
        // from 2
        [invocation setArgument:&val atIndex:2];
        [invocation invoke];
    }
}

此功能可能对代码中的完美support portrait and landscape orientation有用。

1 个答案:

答案 0 :(得分:1)

现在我知道您的应用仅支持纵向方向。在特殊视图控制器中,您需要两步支持纵向和横向 我想你使用的是Objective-C

1.在名为AppDelegate.h的{​​{1}}中添加一个属性 2.在“AppDelegate.m”中,实现@property (nonatomic, assign) BOOL shouldRotation; - UIApplicationDelegate的定位方法,就像

一样
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window

现在,您可以在任何想要的UIViewController中支持横向。

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if (self.shouldRotation) {
        return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscape;
    }
    else {
        return UIInterfaceOrientationMaskPortrait;
    }
}

愿它有所帮助。
PS,还有另一种方法可以解决它:

  1. 您的应用支持所有方向
  2. 您的所有UIViewController覆盖- (void)viewDidLoad { [super viewDidLoad]; // enable landscape orientation [UIApplication sharedApplication].delegate.shouldRoration = YES; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; // disable landscape orientation [UIApplication sharedApplication].delegate.shouldRoration = NO; } ,返回- (UIInterfaceOrientationMask)supportedInterfaceOrientationsUIInterfaceOrientationMaskPortrait