相关疑难解决方法(0)

如何以编程方式确定iPhone界面方向?

UIDevice.orientationinclude UIDeviceOrientationFaceUp和 的可能值UIDeviceOrientationFaceDown.虽然知道设备是扁平的可能是有用的,但这并不能告诉我们它是否是平面显示面向纵向或横向模式的界面.有没有办法在设备返回模糊信息的情况下找到GUI的当前方向?我想我可以跟踪方向变化事件以记住最后的纵向/横向方向或检查主要UIView的边界高度和宽度,但这似乎是kludgey.设备或UIView上有一个我失踪的财产吗?

iphone cocoa-touch

53
推荐指数
5
解决办法
5万
查看次数

UIDeviceOrientationFaceUp - 如何区分肖像和风景?

我试图找出设备是纵向还是横向模式.如果设备没有朝上,我的代码工作得很好.如果它面朝上(和方向== 5),它将无法区分肖像和风景.如果UIDeviceOrientation是FaceUp,有没有在风景/肖像方面确定"方向"?

我的代码:

UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];

NSLog(@"orientation: %d", interfaceOrientation);

if (interfaceOrientation == UIDeviceOrientationIsLandscape(interfaceOrientation)) {
    NSLog(@"LANDSCAPE!!!");
}

if (interfaceOrientation == UIDeviceOrientationIsPortrait(interfaceOrientation)) {
    NSLog(@"PORTRAIT!!!");
}
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch ipad landscape-portrait uideviceorientation

19
推荐指数
2
解决办法
8574
查看次数

didRotateFromInterfaceOrientation 在 iOS 8 中已弃用

从 iOS 8.0 开始,该功能已被弃用,我现在不知道如何正确更改AVCaptureVideoPreviewLayerdidRotateFromInterfaceOrientation的方向。

根据“interfaceOrientation”在 iOS 8 中已弃用,如何更改此方法 Objective C,我有以下工作代码来获取AVCaptureVideoOrientation基于statusBarOrientation

- (AVCaptureVideoOrientation)getOrientation {
    // Translate the orientation
    switch ([[UIApplication sharedApplication] statusBarOrientation]) {
        case UIInterfaceOrientationPortrait:
            return AVCaptureVideoOrientationPortrait;
        case UIInterfaceOrientationPortraitUpsideDown:
            return AVCaptureVideoOrientationPortraitUpsideDown;
        case UIInterfaceOrientationLandscapeLeft:
            return AVCaptureVideoOrientationLandscapeLeft;
        case UIInterfaceOrientationLandscapeRight:
            return AVCaptureVideoOrientationLandscapeRight;
        default:
            return AVCaptureVideoOrientationPortrait;
    }
}
Run Code Online (Sandbox Code Playgroud)

当方向改变时,我需要调用以下函数:

[self.videoPreviewLayer.connection setVideoOrientation:[self getOrientation]];
Run Code Online (Sandbox Code Playgroud)

但我不知道该把它放在哪里合适。

尝试1

由于didRotateFromInterfaceOrientation已弃用并且 Apple 建议使用viewWillTransitionToSize:withTransitionCoordinator:,因此尝试这似乎很自然:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        [self.videoPreviewLayer.connection setVideoOrientation:[self …
Run Code Online (Sandbox Code Playgroud)

objective-c ios ios8

5
推荐指数
1
解决办法
2163
查看次数