替代私有 -[UIDevice setOrientation:] 用于强制相机覆盖进入纵向模式

Posted

技术标签:

【中文标题】替代私有 -[UIDevice setOrientation:] 用于强制相机覆盖进入纵向模式【英文标题】:Alternative to private -[UIDevice setOrientation:] for forcing camera overlay into portrait mode 【发布时间】:2014-03-02 20:06:01 【问题描述】:

我正在为 iPad 制作相机应用程序。我希望相机应用程序仅在纵向模式下工作。我不得不进行旋转观察,并强制设备使用这样的纵向模式:

UIImagePickerController in Landscape

我认为这是私有 API;帖子上的一些用户建议是的。

如果是这样,我可以使用哪些其他解决方法来强制叠加层仅保持纵向模式?如果我不添加此代码,它会旋转到纵向和横向模式。

    //Is this private?
    @interface UIDevice ()
    -(void)setOrientation:(UIDeviceOrientation)orientation;
    @end

    -(IBAction)InitiateCamera
    

    overlayview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
    ...
    ...

    //monitor device rotation
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];




        //launch camera
        [self presentViewController:picpicker animated:YES completion:nil];


    



    - (void) didRotate:(NSNotification *)notification
    


//IS THIS PRIVATE?
        //Maintain the camera in portrait orientation
        [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];

    

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    
        return UIInterfaceOrientationIsPortrait(interfaceOrientation);
    

    -(NSUInteger)supportedInterfaceOrientations
    

        return UIInterfaceOrientationMaskPortrait;
    

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    
        return UIInterfaceOrientationPortrait;
    

【问题讨论】:

我有点困惑。我本来希望您的 supportedInterfaceOrientations 方法在此视图控制器可见时防止您的 UI 旋转到横向。听起来您的界面无论如何都在旋转。是对的吗?如果您希望整个应用仅是纵向的,则可以将键/值对添加到目标的 Info.plist。 相信我亚伦。这正是我所做和所做的。我做的第一件事是将它设置在我的 plist 文件中。然后我在代码中设置它(如您在上面看到的),但出于某种原因它仍然喜欢横向旋转 iPad。因此我的暴力破解问题 这很奇怪。这是一件愚蠢的事情,但可能值得一试——尝试一个干净的构建?重置模拟器中的内容和设置(或删除设备上的应用程序)以确保没有陈旧的 Info.plist,并从 Xcode 进行干净的构建/运行。我怀疑就是这样,但最好确定一下。我真的会认为 Info.plist 中的 UISupportedInterfaceOrientations 就足够了。 【参考方案1】:

请改用此代码。我提交了一个应用程序,它在 iTunes 上获得了批准

- (void) didRotate:(NSNotification *)notification

    [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(__bridge id)((void*)UIInterfaceOrientationPortrait)];


【讨论】:

很高兴知道这已在 iTunes 上获得批准。【参考方案2】:

是的。尽管orientation 属性出现在UIDevice 标头中,但它在该标头中被标记为只读

【讨论】:

再加上他们必须创建一个类别来定义该符号这一事实使它几乎成为除了公共 API 之外的一切。 我已编辑问题以强调寻找替代方案;否则这只是“好吧,它在文档中”吗? 什么是替代使用? (无效)设置方向:?我已经强制我的应用程序使用纵向模式,但它仍然横向旋转。因此我的困境。

以上是关于替代私有 -[UIDevice setOrientation:] 用于强制相机覆盖进入纵向模式的主要内容,如果未能解决你的问题,请参考以下文章

自制永久免费的私有图床,替代iPic,你值得拥有

为什么ZTNA是虚拟私有网络的强大替代者

为什么ZTNA是虚拟私有网络的强大替代者

getAdvancedTypefaceMetrics 的替代方法

数据存储:私有云的好处

Maven搭建私有仓库(私服)