iPhone X、iPhone XS 等相机变焦问题

Camera Zoom Issue on iPhone X, iPhone XS etc

我遇到的主要问题是我的相机。主要问题是相机在 iPhone X、Xs、Xs Max 和 XR 型号上放大得太远。

我的相机是全屏相机,在较小的 iPhones 上还可以,但是当我使用上述型号时,相机似乎卡在了最大缩放级别。我真正想要完成的是类似于 Instagram 相机工作方式的性质。在 iPhone X 系列之前的所有型号上它都是全屏的,然后看起来尊重边缘插入,或者如果它是全屏,我希望它不会像现在这样放大。

我的想法是使用这样的东西。

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

GitHub 可以在这里找到 repo --> 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
}

这是我用来填充相机的代码块。但是我想变成基于设备大小的东西,而不是尽管 phone

只是填充它

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
    }
}

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

或这个

不是这个(我现在的相机长什么样)

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

首先,您需要使用适当的信息更新您的代码,因为这会给经验较少的其他人一个模糊的想法。

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

访问

因此,通过查看您想要实现的目标,很明显您想要屏幕内的更多视野。这可以通过上面给定的捕获设备的 .builtInWideAngleCamera 属性 访问。改成这样就可以解决你的问题了。

干杯