gpt4 book ai didi

ios - 委托(delegate)停止工作

转载 作者:行者123 更新时间:2023-11-30 14:11:12 24 4
gpt4 key购买 nike

我有两个 View Controller :

  1. CameraViewController
  2. CameraPhotoDetailViewController

我在第一张照片中拍照,然后执行第二张照片并将图像呈现给用户

我在CameraViewController中创建了名为CameraDelegate的协议(protocol):

@objc protocol CameraDelegate: class {
optional func cameraImageReady(#image: UIImage)
optional func didCloseCameraImageDetailView()
}

两个 View Controller 都实现了这个协议(protocol)并且都有委托(delegate)

CameraViewController

class CameraViewController: UIViewController, AVCaptureFileOutputRecordingDelegate, CameraDelegate {

// MARK:
// MARK: - Property
@IBOutlet weak var captureButton: UIButton!
@IBOutlet var previewView: CameraPreviewView!

weak var cameraDelegate: CameraDelegate?
...
}

CameraPhotoDetailViewController

class CameraPhotoDetailViewController: UIViewController, UITextFieldDelegate, CameraDelegate {

// MARK: Variables
@IBOutlet weak var cameraDetailView: SpringView!
@IBOutlet weak var cameraImageView: UIImageView!
@IBOutlet weak var cameraImageNameLabel: UITextField!


weak var cameraDelegate: CameraDelegate?
// MARK: -
...
}

我在 CameraViewController 中的 override funcprepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){} 中分配给这些委托(delegate)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {        

if let cameraPhotoDetailViewController = segue.destinationViewController as? CameraPhotoDetailViewController {
println("Segue")
self.cameraDelegate = cameraPhotoDetailViewController
cameraPhotoDetailViewController.cameraDelegate = self
}
}

出于某种原因,当我从 CameraPhotoDetailViewController 调用协议(protocol)方法 didCloseCameraImageDetailView() 时,委托(delegate)可以工作,但当我调用协议(protocol)方法 cameraImageReady(#图像:UIImage) 来自 CameraViewController

CameraViewController调用

@IBAction func didPressCaptureButton(sender: AnyObject) {

captureButton.hidden = true

let videoOrientation = (self.previewView.layer as! AVCaptureVideoPreviewLayer).connection.videoOrientation

self.stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo).videoOrientation = videoOrientation

// Flash set to Auto for Still Capture
CameraViewController.setFlashMode(AVCaptureFlashMode.Auto, device: self.videoDeviceInput!.device)



if let videoConnection = self.stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo) {
videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait

self.stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: { (sampleBuffer, error) -> Void in
if (sampleBuffer != nil) {

var imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
var dataProvider = CGDataProviderCreateWithCFData(imageData)
var cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, kCGRenderingIntentDefault)

var image: UIImage = UIImage(data: imageData)!
self.cameraDelegate?.cameraImageReady!(image: image)
self.performSegueWithIdentifier(Constants.CAMERA_IMAGE_DETAIL_SEGUE, sender: self)
}
})
}
}

CameraPhotoDetailViewController调用

@IBAction func didPressCloseButton(sender: AnyObject) {
dismissViewControllerAnimated(false, completion: nil)
cameraDelegate?.didCloseCameraImageDetailView!()
//activityIndicator.removeFromSuperview()
}

我花了一个小时试图弄清楚我错过了什么,但无法真正看到它。我希望这里有人会看到它。

最佳答案

好吧,我知道感觉像白痴 - 我首先调用委托(delegate)方法,然后在 prepareForSegue() 中分配委托(delegate)...

关于ios - 委托(delegate)停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31747748/

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