如何设置相机视图旋转(不使用不推荐使用的代码)
Posted
技术标签:
【中文标题】如何设置相机视图旋转(不使用不推荐使用的代码)【英文标题】:How to set Camera View rotation (without using deprecated code) 【发布时间】:2018-09-29 17:13:13 【问题描述】:基本上,如何做到这一点:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
[[(AVCaptureVideoPreviewLayer *)[[self previewView] layer] connection] setVideoOrientation:(AVCaptureVideoOrientation)toInterfaceOrientation];
不使用已弃用的代码 (willRotateToInterfaceOrientation
)
我的应用需要 ios 9,所以只要新代码向后兼容那么远,我就不需要保留上面的代码。 Apple 建议使用viewWillTransitionToSize:withTransitionCoordinator:
,但我不知道如何。
编辑:
我试过了(正如@Matt 建议的那样)
- (void)viewDidLoad
[super viewDidLoad];
override func viewDidLoad()
super.viewDidLoad()
NotificationCenter.default.addObserver(
forName: UIApplication.willChangeStatusBarOrientationNotification,
object: nil, queue: nil) n in
// this is where you respond
if let userInfo = n.userInfo
// use the userInfo to find out what the new orientation is...
但它会抛出 Use of undeclared identifier 'override' 错误,因为它在 swift 中。
【问题讨论】:
@matt 谢谢你的帮助。 另一方面,既然你用的是这门古老的语言,你可以用我的古书来弄清楚:apeth.com/iOSBook/ch11.html#_receiving_a_built_in_notification 【参考方案1】:除非你想将 objc 与 swift 混合,否则你需要将 matt 的代码转换为 objc,例如如下:
- (void)viewDidLoad
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDeviceOrientationChange) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil];
-(void)handleDeviceOrientationChange:(NSNotification *)notification
NSDictionary *userInfo = notification.userInfo;
// Your code
【讨论】:
感谢您的回复。我不是想混合语言。看起来不错——我需要移除观察者吗?或者,有没有办法在不使用观察者的情况下做到这一点?再次感谢。【参考方案2】:根据 Apple DTS,此代码的作用相同(我自己也确认过)
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsPortrait(deviceOrientation) || UIDeviceOrientationIsLandscape(deviceOrientation))
[[(AVCaptureVideoPreviewLayer *)[[self previewView] layer] connection] setVideoOrientation:(AVCaptureVideoOrientation)deviceOrientation];
【讨论】:
以上是关于如何设置相机视图旋转(不使用不推荐使用的代码)的主要内容,如果未能解决你的问题,请参考以下文章