iPhone X、iPhone XS 等相机变焦问题
Camera Zoom Issue on iPhone X, iPhone XS etc
我遇到的主要问题是我的相机。主要问题是相机在 iPhone X、Xs、Xs Max 和 XR 型号上放大得太远。
我的相机是全屏相机,在较小的 iPhones 上还可以,但是当我使用上述型号时,相机似乎卡在了最大缩放级别。我真正想要完成的是类似于 Instagram 相机工作方式的性质。在 iPhone X 系列之前的所有型号上它都是全屏的,然后看起来尊重边缘插入,或者如果它是全屏,我希望它不会像现在这样放大。
我的想法是使用这样的东西。
- 确定设备。我想我可以使用 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
属性 访问。改成这样就可以解决你的问题了。
干杯
我遇到的主要问题是我的相机。主要问题是相机在 iPhone X、Xs、Xs Max 和 XR 型号上放大得太远。
我的相机是全屏相机,在较小的 iPhones 上还可以,但是当我使用上述型号时,相机似乎卡在了最大缩放级别。我真正想要完成的是类似于 Instagram 相机工作方式的性质。在 iPhone X 系列之前的所有型号上它都是全屏的,然后看起来尊重边缘插入,或者如果它是全屏,我希望它不会像现在这样放大。
我的想法是使用这样的东西。
- 确定设备。我想我可以使用 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
属性 访问。改成这样就可以解决你的问题了。
干杯