Как установить previewLayer.connection.videoOrientation в Swift 2?
В Objective-C вы можете сделать это:
if ( UIDeviceOrientationIsPortrait( deviceOrientation ) || UIDeviceOrientationIsLandscape( deviceOrientation ) ) {
AVCaptureVideoPreviewLayer *previewLayer = (AVCaptureVideoPreviewLayer *)self.previewView.layer;
previewLayer.connection.videoOrientation = (AVCaptureVideoOrientation)deviceOrientation;
}
Но в Swift, как лучше всего перевести эту последнюю строку? Вы не можете сделать "deviceOrientation as AVCaptureVideoOrientation".
Лучшее, что я мог придумать, это:
if(UIDeviceOrientationIsPortrait(deviceOrientation) || UIDeviceOrientationIsLandscape(deviceOrientation)) {
let myPreviewLayer: AVCaptureVideoPreviewLayer = self.previewLayer
myPreviewLayer.connection.videoOrientation = AVCaptureVideoOrientation.init(rawValue: deviceOrientation.rawValue-1)!
}
Но это кажется не элегантным. Здесь есть -1, потому что это просто перечисление в конце дня, а перечисление UIDeviceOrientation имеет "Неизвестный" в положении 0, которого нет у AVCaptureVideoOrientation...
4 ответа
Это отлично справляется со Swift 4:
previewLayer.connection?.videoOrientation = AVCaptureVideoOrientation(rawValue: UIApplication.shared.statusBarOrientation.rawValue)!
Попробуй это
let avLayer = (self.previewView.layer as AVCaptureVideoPreviewLayer)
let connection = avLayer.connection
let orientation = AVCaptureVideoOrientation(rawValue: self.interfaceOrientation.rawValue)!
connection.videoOrientation = orientation
connection.videoOrientation = AVCaptureVideoOrientation.Portrait
Вы можете найти значения констант AVCaptureVideoOrientation в быстрых заголовочных файлах. (Свифт 2)
Это преобразование, которое я получил:
if UIDeviceOrientationIsPortrait(deviceOrientation) || UIDeviceOrientationIsLandscape(deviceOrientation) {
var previewLayer: AVCaptureVideoPreviewLayer = previewView.layer
previewLayer.connection.videoOrientation = deviceOrientation
}
Конвертер, который я использовал, как правило, не знает, как должен выглядеть код несколько раз (Int
против CGFloat
) так что это может не работать без устранения ошибок. дайте мне знать, если он делает то, что вы хотите, например, переменная, вероятно, может быть изменена на константу.