iPhone X,iPhone XS等上的相机缩放问题

时间:2019-01-24 18:31:48

标签: swift uikit avfoundation

我遇到的主要问题是相机。主要问题是相机在iPhone X,Xs,Xs Max和XR型号上的变焦范围太大。

我的相机是全屏相机,在较小的iPhone上还可以,但是一旦进入上述型号,相机似乎就卡在了最大变焦级别上。我真正想要实现的是与instagram相机工作原理类似的性质。在直到iPhone X系列之前所有型号都全屏显示的地方,然后看似尊重边缘插图,或者如果要全屏显示,我希望它不会像现在这样放大。

我的思维过程是使用这样的东西。

  1. 确定设备。我认为我可以使用Device Guru之类的东西来确定设备的类型。

GitHub仓库可以在这里找到-> https://github.com/InderKumarRathore/DeviceGuru

使用此工具或类似工具,我应该能够获得设备的屏幕尺寸。然后,我可以做一些数学运算来确定适合相机视图的屏幕尺寸。

假设DeviceGuru无法正常工作,我将使用类似这样的方法来获取屏幕的宽度和高度。


// Screen width.
public var screenWidth: CGFloat {
    return UIScreen.main.bounds.width
}

// Screen height.
public var screenHeight: CGFloat {
    return UIScreen.main.bounds.height
}

这是我用来填充相机的代码块。但是,我想根据设备尺寸而不是随便装电话来填充它


import Foundation
import UIKit
import AVFoundation

class PreviewView: UIView {
    var videoPreviewLayer: AVCaptureVideoPreviewLayer {
        guard let layer = layer as? AVCaptureVideoPreviewLayer else {
            fatalError("Expected `AVCaptureVideoPreviewLayer` type for layer. Check PreviewView.layerClass implementation.")
        }
        layer.videoGravity = AVLayerVideoGravity.resizeAspectFill
        layer.connection?.videoOrientation = .portrait


        return layer
    }

    var session: AVCaptureSession? {
        get {
            return videoPreviewLayer.session
        }
        set {
            videoPreviewLayer.session = newValue
        }
    }

    // MARK: UIView

    override class var layerClass: AnyClass {
        return AVCaptureVideoPreviewLayer.self
    }
}

我希望我的相机看起来像这样

Instagram

或此

SnapChat

不是这样(我目前的相机是什么样子)

My Camera

我看过很多问题,没有人有具体的解决方案,所以请不要将其标记为重复,也不要说这只是iPhone X系列的问题。

1 个答案:

答案 0 :(得分:1)

首先,您需要使用适当的信息来更新代码,因为这样会使经验不足的其他人获得模糊的想法。

查看图像很明显,您尝试访问的摄像机类型与您拥有的摄像机完全不同。随着iPhone 7+和iPhone X的推出,苹果向用户介绍了许多不同的摄像头设备。所有这些都可以通过AVCaptureDevice.DeviceType访问。

因此,通过查看您想要实现的目标,很明显,您希望在屏幕中拥有更多的视野。可以通过上述给定捕获设备的.builtInWideAngleCamera属性来访问。将其更改为此将解决您的问题。

欢呼