gpt4 book ai didi

ios - 无法识别的选择器发送到实例 (UIPinchGestureRecognizer)

转载 作者:行者123 更新时间:2023-11-28 11:48:36 26 4
gpt4 key购买 nike

我已经浏览过之前关于这个主题的主题,但我仍然无法找到解决方案。我已经研究了几天了。

我正在尝试在相机预览屏幕上使用 PinchGestureRecognizer。

但是,我收到了这个错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Testing.CameraViewController pinchActionWithGestureRecgnizer:]: unrecognized selector sent to instance 0x10222d030'

这是我的设置:我为我的相机功能创建了一个单独的类。

class CameraSetup{

var captureSession = AVCaptureSession()
var frontCam : AVCaptureDevice?
var backCam : AVCaptureDevice?
var currentCam: AVCaptureDevice?
var captureInput: AVCaptureDeviceInput?
var captureOutput: AVCapturePhotoOutput?
var cameraPreviewLayer: AVCaptureVideoPreviewLayer?

var oldZoomScale:CGFloat = 1.0


//bunch of camera functions......followed by this function



@objc func pinchAction(gestureRecgnizer: UIPinchGestureRecognizer) {

do { print("func started")
try currentCam!.lockForConfiguration()
print(currentCam?.videoZoomFactor)
print(currentCam?.deviceType)

// ズームの最大値
let maxZoomScale: CGFloat = 6.0
// ズームの最小値
let minZoomScale: CGFloat = 1.0
// 現在のカメラのズーム度
var currentZoomScale: CGFloat = currentCam!.videoZoomFactor
// ピンチの度合い
let pinchZoomScale: CGFloat = gestureRecgnizer.scale
// ピンチアウトの時、前回のズームに今回のズーム-1を指定

// 例: 前回3.0, 今回1.2のとき、currentZoomScale=3.2

if pinchZoomScale > 1.0 {

currentZoomScale = oldZoomScale+pinchZoomScale-1

} else {

currentZoomScale = oldZoomScale-(1-pinchZoomScale)*oldZoomScale

}

// 最小値より小さく、最大値より大きくならないようにする
if currentZoomScale < minZoomScale {
currentZoomScale = minZoomScale
}
else if currentZoomScale > maxZoomScale {
currentZoomScale = maxZoomScale

}

// 画面から指が離れたとき、stateがEndedになる。

if gestureRecgnizer.state == .ended {

oldZoomScale = currentZoomScale

}

currentCam?.videoZoomFactor = currentZoomScale

defer {currentCam?.unlockForConfiguration()}

} catch {

// handle error

return

}

}

然后我尝试在我的 cameraPreviewController 中调用它

class CameraViewController :UIViewController {

@IBOutlet weak var flashButtonImage: UIButton!

@IBOutlet weak var cameraButton: UIButton!
@IBOutlet weak var imagePreview: UIImageView!
var image: UIImage?
var cameraSetup: CameraSetup!

func initializeCamera(){

cameraSetup = CameraSetup()
cameraSetup.captureDevice()
cameraSetup.configureCaptureInput()
cameraSetup.configureCaptureOutput()
cameraSetup.configurePreviewLayer(view: imagePreview)



}

override func viewDidLoad() {
super.viewDidLoad()
applyRoundCorner(cameraButton)
initializeCamera()

let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(cameraSetup.pinchAction(gestureRecgnizer:)))

print("testing")

view.addGestureRecognizer(pinchGesture)

}

我检查了 socket 连接,但没有发现有问题的连接,所以我认为这不是连接问题。如果你们建议,我会仔细看看。

非常感谢。

最佳答案

你不能在一个类中做方法而在另一个地方改变目标

let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(cameraSetup.pinchAction(gestureRecgnizer:)))

let pinchGesture = UIPinchGestureRecognizer(target:cameraSetup, action: #selector(cameraSetup.pinchAction(gestureRecgnizer:)))

无论是cameraSetup 还是 self,目标都应该包含选择器中的方法

关于ios - 无法识别的选择器发送到实例 (UIPinchGestureRecognizer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52104034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com