使用按钮以编程方式更改方向 - iOS

时间:2018-05-17 08:35:16

标签: ios swift swift3 orientation ios11

我有一个视图控制器,我希望有以下经验。 在视图控制器内部,我得到一个按钮,强制将方向旋转到横向右侧。

在部署信息中 - 设备方向我已启用"风景正确"和"肖像"。

我想提一下,在我的设备中,我启用了#34;纵向定位锁定#34;这就是为什么我想要一个按钮以编程方式使用以下代码旋转方向。

let rotateButton: UIButton = {
    let btn = UIButton(type: .system)
    btn.setTitle("Rotate", for: .normal)
    btn.setTitleColor(.red, for: .normal)
    btn.addTarget(self, action: #selector(rotateTapped), for: .touchUpInside)
    return btn
}()

@objc func rotateTapped() {
    let value = UIInterfaceOrientation.landscapeRight.rawValue
    UIDevice.current.setValue(value, forKey: "orientation")
}

因此上面的代码工作正常,屏幕正在旋转。 虽然我想在用户旋转回纵向时,屏幕再次旋转为纵向而不按任何按钮。 当"纵向方向锁定"打开时,屏幕不会旋转回肖像。

我没试过以下代码。

1)

    NotificationCenter.default.addObserver(self, selector: #selector(rotated), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)


@objc func rotated() {
    if UIDevice.current.orientation.isLandscape {
        print("Landscape") //when the user taps the button this is being printed.
    } else {
        print("Portrait") //when the user rotates back to portrait this is NOT being printed.
    }
}

和2)

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.orientation == .landscapeRight {
        let value = UIInterfaceOrientation.portrait.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
    }
}

当用户再次旋转手机时,有什么可以改回肖像的想法吗?

2 个答案:

答案 0 :(得分:6)

我没有快速的代码。以下是 this.api.getFlickrFeed().subscribe( data => { this.flickrFeed = data['items']; console.log(this.flickrFeed); } ); 代码,它对我有用。您可以根据自己的要求将其转换为swift。

Ojective C

objective c

更新

Swift 4.0

UIInterfaceOrientation currentOrientation = [UIApplication sharedApplication].statusBarOrientation;
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];    
[UIViewController attemptRotationToDeviceOrientation];

上面的代码已经由我测试过并且工作正常。上面的代码不适用于你,然后使用var currentOrientation: UIInterfaceOrientation = UIApplication.shared.statusBarOrientation var value = .portrait UIDevice.current.setValue(value, forKey: "orientation") UIViewController.attemptRotationToDeviceOrientation() 延迟执行它。

答案 1 :(得分:1)

var currentOrientation: UIInterfaceOrientation = UIApplication.shared.statusBarOrientation
var value = .landscapeRight
UIDevice.current.setValue(value, forKey: "orientation")
UIViewController.attemptRotationToDeviceOrientation()