iOS 9中的强制视图控制器方向

iOS 9中的强制视图控制器方向,第1张

概述我正在制作一个摄影应用程序,允许以肖像或风景拍摄照片.由于项目的要求,我不能让设备方向自动旋转,但确实需要支持旋转. 使用以下定位方法时: override func shouldAutorotate() -> Bool { return true}override func supportedInterfaceOrientations() -> UIInterfaceOrienta 我正在制作一个摄影应用程序,允许以肖像或风景拍摄照片.由于项目的要求,我不能让设备方向自动旋转,但确实需要支持旋转.

使用以下定位方法时:

overrIDe func shouldautorotate() -> Bool {    return true}overrIDe func supportedInterfaceOrIEntations() -> UIInterfaceOrIEntationMask {    if self.orIEntation == .Landscape {        return UIInterfaceOrIEntationMask.LandscapeRight    } else {        return UIInterfaceOrIEntationMask.Portrait    }}overrIDe func preferredInterfaceOrIEntationForPresentation() -> UIInterfaceOrIEntation {    if self.orIEntation == .Landscape {        return UIInterfaceOrIEntation.LandscapeRight    } else {        return UIInterfaceOrIEntation.Portrait    }}

我可以在启动时正确设置旋转.通过更改方向值并调用UIVIEwController.attemptRotationToDeviceOrIEntation(),我能够支持旋转到新的所需接口.但是,此旋转仅在用户实际移动其设备时发生.我需要它自动发生.

我可以调用:UIDevice.currentDevice().setValue(targetorIEntation.rawValue,forKey:“orIEntation”)来强制更改,但这会导致其他副作用,因为UIDevice.currentDevice().orIEntation只返回从该点开始的setValue上. (而且非常脏)

有什么我想念的吗?我已经研究过关闭并启动一个新的视图控制器,但这有其他问题,例如在解除时立即出现UI故障并立即呈现新的视图控制器.

编辑:

以下方法对我不起作用:

> Trick preferredInterfaceOrientationForPresentation to fire on viewController change
> Forcing UIInterfaceOrientation changes on iPhone

编辑2:

对潜在解决方案的思考

>直接设置方向(使用setValue)并处理iOS 9上出现的所有副作用(不可接受)
>我可以使用当前解决方案并指示用户需要旋转设备.设备物理旋转后,UI会旋转,然后正确锁定到位. (差的UI)
>我可以找到一种强制刷新方向并在没有物理 *** 作的情况下旋转的解决方案. (我在问什么,并寻找)
>手工完成所有工作.我可以纵向或横向锁定界面,并手动旋转和调整容器视图的大小.这是“脏”的,因为它放弃了所有大小类自动布局功能,并导致更重的代码.我试图避免这种情况.

解决方法 我以前遇到过这个问题,我自己.我能够通过简单的解决方法解决它(和 GPUImage).我的代码在Objective-C中,但我确定你将它转换为Swift没有问题.

我首先将项目支持的旋转设置为我希望支持的所有内容,然后覆盖相同的UIVIEwController方法:

-(BOol)shouldautorotate {     return TRUE; }-(NSUInteger)supportedInterfaceOrIEntations {    return UIInterfaceOrIEntationMaskPortrait;}

这允许设备旋转但在纵向模式下将保持不变.然后开始观察设备旋转:

[[NSNotificationCenter defaultCenter] addobserver:self                                         selector:@selector(adjustForRotation:)                                             name:UIDeviceOrIEntationDIDChangeNotification                                           object:nil];

如果设备处于纵向模式或横向,则更新UI:

-(voID)adjustForRotation:(NSNotification*)notification{    UIDeviceOrIEntation orIEntation = [[UIDevice currentDevice] orIEntation];    switch (orIEntation) {        case UIDeviceOrIEntationLandscapeleft:        {            // UPDATE UI        }            break;        case UIDeviceOrIEntationLandscapeRight:        {            // UPDATE UI        }            break;        default: // All other orIEntations - Portrait,UpsIDe Down,UnkNown        {            // UPDATE UI        }            break;    }}

最后,GPUImage根据设备的方向渲染图像.

[_gpuImageStillCamera capturePhotoAsImageProcessedUpToFilter:last_f                                              withCompletionHandler:^(UIImage *processedImage,NSError *error) {     // Process the processedImage }];
总结

以上是内存溢出为你收集整理的iOS 9中的强制视图控制器方向全部内容,希望文章能够帮你解决iOS 9中的强制视图控制器方向所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1107500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存