【问题标题】:how make AVFoundtion stretch and rotate to be LandScape on UIView如何使 AVFoundtion 拉伸和旋转成为 UIView 上的 LandScape
【发布时间】:2022-11-21 07:32:27
【问题描述】:

我有一个来自 AVFoundation 的摄像头输入,如何拉伸和旋转它以达到 UIView 的长度 LiveStreamView 类我从文档中取出代码与uiview相关联
我很想知道怎么做,谢谢。 It looks like this

我的代码:

import Foundation
import AVFoundation
import UIKit
class AVFoundtionHandler {
    
    let captureSesstion = AVCaptureSession()
    
    
    
    init() {
        
        configure()
        
    }
    
    func configure() {
        
        let videoDevice = AVCaptureDevice.default(.builtInWideAngleCamera,
                                                  for: .video, position: .back)
        
        guard let videoDeviceInput = try? AVCaptureDeviceInput(device: videoDevice!),
            captureSesstion.canAddInput(videoDeviceInput)
        else { return }
        captureSesstion.addInput(videoDeviceInput)
        
    }
    
   
    
}
class LiveStreamView:UIView {
    
    override class var layerClass: AnyClass {
        return AVCaptureVideoPreviewLayer.self
    }
    
    /// Convenience wrapper to get layer as its statically known type.
    var videoPreviewLayer: AVCaptureVideoPreviewLayer {
        return layer as! AVCaptureVideoPreviewLayer
    }
    
   
    
    
    
}

【问题讨论】:

    标签: ios swift uikit


    【解决方案1】:

    首先

    • 获取设备方向UIDevice.current.orientation
    • 设置AVCaptureVideoPreviewLayer.connection?.videoOrientation属性
    let deviceOrientation = UIDevice.current.orientation
    let videoOrientation = AVCaptureVideoOrientation(rawValue: deviceOrientation.rawValue)
    videoPreviewLayer.connection?.videoOrientation = videoOrientation ?? .portrait
    

    请注意,这应该在主线程上运行,否则会崩溃。

    我也更喜欢在同一个地方设置videoPreviewLayer.videoGravity = .resizeAspectFill(默认是resizeAspect

    主要的并发症是虽然UIDeviceOrientationAVCaptureVideoOrientation一些非常相似的值,它们不相同,UIDeviceOrientation 有更多的值(faceUpfaceDownunknown)。在这种情况下,我只是将它设置为 portrait 作为默认设置,但您需要为您的应用程序制作任何适合的内容。

    之后,您需要观察设备方向的变化(使用 UIView 的 override func viewWillTransition),如果设备旋转,则再次更新相同的值。

    这解决了视图问题。如果您正在处理视频,或从相机捕获图像,这是您需要做的另一组事情——尽管是单独的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多