我正在嘗試在我的主視圖控制器到我的預覽視圖控制器之間執行一個segue,該控制器將實際顯示拍攝的照片。我在故事板中將這個 segue 命名為“showPhoto”。但是當我嘗試從主視圖控制器實際切換到預覽視圖控制器時,我遇到了一些錯誤。第一個說“'HomeViewController'型別的值沒有成員'影像'”但是,我的預覽視圖控制器是這個影像鏈接的地方,所以我不確定為什么Xcode說我的HomeView控制器沒有成員影像,而它應該是我的預覽正在轉入的視圖控制器。第二個錯誤再次表示“無法在范圍內找到‘影像’”我的代碼如下,用于主視圖控制器和預覽視圖控制器。
import UIKit
import AVFoundation
class HomeViewController: UIViewController, AVCapturePhotoCaptureDelegate {
var captureSession = AVCaptureSession()
var backCamera: AVCaptureDevice?
var frontCamera: AVCaptureDevice?
var currentCamera: AVCaptureDevice?
var photoOutput: AVCapturePhotoOutput?
var cameraPreviewLayer: AVCaptureVideoPreviewLayer?
@IBOutlet weak var camerabtn: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
setupCaptureSession()
setupDevice()
setupInputOutput()
setupPreviewLayer()
startRunningCaptureSession()
}
func setupCaptureSession() {
captureSession.sessionPreset = AVCaptureSession.Preset.photo
}
func setupDevice() {
let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera], mediaType: AVMediaType.video, position: AVCaptureDevice.Position.unspecified)
let devices = deviceDiscoverySession.devices
for device in devices {
if device.position == AVCaptureDevice.Position.back {
backCamera = device
} else if device.position == AVCaptureDevice.Position.front {
frontCamera = device
}
}
currentCamera = backCamera
}
func setupInputOutput() {
do {
let captureDeviceInput = try AVCaptureDeviceInput(device: currentCamera!)
captureSession.addInput(captureDeviceInput)
photoOutput = AVCapturePhotoOutput()
photoOutput?.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg])], completionHandler: nil)
captureSession.addOutput(photoOutput!)
} catch {
print(error)
}
}
func setupPreviewLayer() {
cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
cameraPreviewLayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
cameraPreviewLayer?.frame = self.view.frame
self.view.layer.insertSublayer(cameraPreviewLayer!, at: 0)
}
func startRunningCaptureSession() {
captureSession.startRunning()
}
@IBAction func camerabtn(_ sender: Any) {
let settings = AVCapturePhotoSettings()
photoOutput?.capturePhoto(with: settings, delegate: self)
performSegue(withIdentifier: "showPhoto", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showPhoto " {
let previewVC = segue.destination as! PreviewViewController
previewVC.image = self.image
}
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
if let imageData = photo.fileDataRepresentation() {
image = UIImage(data: imageData)
performSegue(withIdentifier: "showPhoto", sender: nil)
}
}
}
import UIKit
class PreviewViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBOutlet weak var image : UIImageView!
@IBAction func cancelbtn(_ sender: Any) {
}
@IBAction func savebtn(_ sender: Any) {
}
}
uj5u.com熱心網友回復:
您正試圖將 UIImage 傳遞給 UIImageView。它不可訪問。在您的 PreviewViewController 中,您應該為 UIImage 創建一個物件
var newImage: UIImage!
在 HomeViewController 中
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showPhoto " {
let previewVC = segue.destination as! PreviewViewController
previewVC.newImage = self.image
}
}
uj5u.com熱心網友回復:
@IBOutlet weak var image : UIImageView!
此影像屬性不可訪問,因此像這樣創建影像的新屬性。
var newImage: UIImage!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362794.html
