Я ограничил ориентацию фиксированного устройства в своем приложении только на портрете. Однако, как и Instagram, у меня есть функция камеры, и мне нужно быстро получить текущую ориентацию, но ориентация всегда отображается как портрет. Есть ли способ использовать гироскоп для ручной ориентации?Как я могу определить ориентацию устройства вручную, если у меня есть ограниченная ориентация в моем приложении?
0
A
ответ
0
В Swift 2.3 вы можете использовать следующий код, чтобы установить ориентацию AVCaptureDeviceInput (или заменить его собственной функциональностью).
меня использовать этот код в https://github.com/ytakzk/Fusuma -> FSCameraView.swift
import CoreMotion
//var videoInput: AVCaptureDeviceInput?
let motionManager = CMMotionManager()
if motionManager.gyroAvailable {
motionManager.deviceMotionUpdateInterval = 0.2;
motionManager.startDeviceMotionUpdates()
motionManager.gyroUpdateInterval = 1
motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue()!) {
(data: CMDeviceMotion?, error:NSError?) in
if let videoConnection = self.imageOutput?.connectionWithMediaType(AVMediaTypeVideo) {
if (data?.gravity.x)! > -0.6 && (data?.gravity.x)! < 0.6 {
if (data?.gravity.y)! < 0.4 {
videoConnection.videoOrientation = .Portrait
} else {
videoConnection.videoOrientation = .PortraitUpsideDown
}
} else {
if (data?.gravity.x)! < 0 {
videoConnection.videoOrientation = .LandscapeRight
} else {
videoConnection.videoOrientation = .LandscapeLeft
}
}
}
//print(data?.gravity.x)
//print(data?.gravity.y)
//print(data?.gravity.z)
}
}
1
UIDevice может сказать вам ориентацию, даже если вы не поддерживают автоматическое вращение. Я использую это для обработки вращения только в одном контроллере вида:
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.current.beginGeneratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
deinit {
UIDevice.current.endGeneratingDeviceOrientationNotifications()
NotificationCenter.default.removeObserver(self)
}
@objc private func orientationChanged(_ notification: Foundation.Notification) {
currentOrientation = UIDevice.current.orientation
}