我在使用自定义叠加视图的相机时遇到了一些麻烦。
这是我用来设置和呈现UIImagePickerController
:
import UIKit
class ViewController: UIViewController, CameraOverlayDelegate {
var imagePicker = UIImagePickerController()
@IBAction func pickImageButton(sender: AnyObject) {
if UIImagePickerController.isSourceTypeAvailable(
UIImagePickerControllerSourceType.Camera) {
imagePicker = UIImagePickerController()
imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
imagePicker.showsCameraControls = false
let myCameraOverlayViewController = CameraOverlayViewController(
nibName:"CameraOverlayView",
bundle: nil)
let customView = myCameraOverlayViewController.view
customView.frame = imagePicker.view.frame
imagePicker.cameraOverlayView = customView
myCameraOverlayViewController.delegate = self
presentViewController(imagePicker, animated: true, completion: nil)
} else {
print("No camera")
}
}
func didTakePhoto(sender: CameraOverlayViewController) {
print("Do something ...")
}
自定义叠加视图是* .xib文件,这是我使用的CameraOverlayViewController:
import UIKit
protocol CameraOverlayDelegate {
func didTakePhoto(sender: CameraOverlayViewController)
}
class CameraOverlayViewController: UIViewController {
var delegate: CameraOverlayDelegate! = nil
@IBOutlet var myView: UIView!
@IBAction func takePhotoButton(sender: AnyObject) {
delegate.didTakePhoto(self)
}
}
当我运行应用程序时,只要点击应该调用-[UIView takePictureButton:]: unrecognized selector sent to instance
- 函数的按钮,我就会收到错误(takePhotoButton(...)
)。
我对Xcode,iOS开发和Swift都很陌生......以防问题显而易见。 ;)
提前致谢。
答案 0 :(得分:0)
您的错误意味着您正在错误的对象上调用该方法。基本上每当遇到unrecognized selector...
时,就意味着你在括号内有问题。
takePhotoButton()
的发件人类型为AnyObject
,但会调用didTakePhoto()
,其发件人类型为CameraOverlayViewController
。因此,按钮调用应由视图控制器调用的方法。现在你看到了这种差异吗?
修复它...我无法帮助你。也许其他人可以。正如我上面所说,同一个对象必须调用你的两个方法。或许你没有在故事板中正确分配一些东西。
答案 1 :(得分:0)
UIButton
和@IBAction func takePhotoButton
之间的关联被破坏了。我通过删除整个CameraOverlayViewController
并制作一个新的来修复它。
可能有一种更简单的方法,但我还没弄清楚Xcode中的所有内容是如何协同工作的。