如何在App Extension中获取设备当前方向,我尝试了以下两种方法,但均未成功。

  • 总是返回UIDeviceOrientationUnknown
    [[UIDevice currentDevice] orientation]
    
  • 它显示红色消息,表示“sharedApplication”在iOS上不可用(应用程序扩展)
    [[UIApplication sharedApplication] statusBarOrientation];
    
  • 我也添加了一个观察者,但是没有被调用。
    [[NSNotificationCenter defaultCenter] addObserver:self.view selector:@selector(notification_OrientationWillChange:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil];
    
    
    
    - (void)notification_OrientationWillChange:(NSNotification*)n
    {
       UIInterfaceOrientation orientation = (UIInterfaceOrientation)[[n.userInfo objectForKey:UIApplicationStatusBarOrientationUserInfoKey] intValue];
    
        if (orientation == UIInterfaceOrientationLandscapeLeft)
           [self.textDocumentProxy insertText:@"Left"];
        if (orientation == UIInterfaceOrientationLandscapeRight)
           [self.textDocumentProxy insertText:@"Right"];
    }
    

  • 因此,现在任何人如何获得当前的设备方向。

    最佳答案

    我有个主意!

    extension UIScreen {
    
        var orientation: UIInterfaceOrientation {
            let point = coordinateSpace.convertPoint(CGPointZero, toCoordinateSpace: fixedCoordinateSpace)
            if point == CGPointZero {
                return .Portrait
            } else if point.x != 0 && point.y != 0 {
                return .PortraitUpsideDown
            } else if point.x == 0 && point.y != 0 {
                return .LandscapeLeft
            } else if point.x != 0 && point.y == 0 {
                return .LandscapeRight
            } else {
                return .Unknown
            }
        }
    
    }
    

    编辑:在Swift 4上,您可以执行以下操作:
    extension UIScreen {
        var orientation: UIInterfaceOrientation {
            let point = coordinateSpace.convert(CGPoint.zero, to: fixedCoordinateSpace)
            switch (point.x, point.y) {
            case (0, 0):
                return .portrait
            case let (x, y) where x != 0 && y != 0:
                return .portraitUpsideDown
            case let (0, y) where y != 0:
                return .landscapeLeft
            case let (x, 0) where x != 0:
                return .landscapeRight
            default:
                return .unknown
            }
        }
    }
    

    关于ios - 获取设备当前的方向(应用扩展),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25462091/

    10-11 14:51
    查看更多