我有一个条形按钮项目,触发一个警告,询问用户是否要拍照或从图书馆中选择图像 . 在选择照片库时,我实例化一个UIImagePickerController,以便他们选择一张照片 .
我的问题是,在选择图像并关闭视图控制器后,应用程序返回到原始视图控制器,图像正确显示在插座中,但之前工作的按钮不会触发警报再次选择图像(也不会任何东西打印到控制台) .
@IBAction func pickAnImage(sender: AnyObject) {
selectImageSourceAlert()
}
func selectImageSourceAlert() {
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet)
let userLibrary = UIAlertAction(title: "Photo Library", style: .Default) {
_ in
self.presentImagePicker(pickerStyle: .PhotoLibrary)
}
let useCamera = UIAlertAction(title: "Camera", style: .Default) {
_ in
let x = UIImagePickerController.isSourceTypeAvailable(.Camera)
print(x)
if x {
self.presentImagePicker(pickerStyle: .Camera)
} else {
print("No camera available")
}
}
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
alert.addAction(userLibrary)
alert.addAction(useCamera)
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)
}
func presentImagePicker(pickerStyle style: UIImagePickerControllerSourceType) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = style
imagePicker.allowsEditing = true
self.presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
self.dismissViewControllerAnimated(true, completion: nil)
if let image = info["UIImagePickerControllerEditedImage"] as? UIImage {
imagePickerView.image = image
}
}
几天后,我仍然无法弄明白 . 我发现当我删除“if let image = info”位并放弃将图像分配给imagePickerView插座时,该按钮在解除视图控制器后工作 . 如果我在选择图像之前的任何时候取消,该按钮也可以使用 . 仅当我将图像分配到插座时它才起作用 .
在此先感谢您的帮助!
编辑:我注意到当我在右上角添加第二个按钮并将其分配给相同的动作时,它甚至在分配照片后也能正常工作 . 左下角的第一个条形按钮项仅在没有分配给imageView的图像时才起作用 . 不确定为什么因为它没有被imageView覆盖 . 为清晰起见,添加了红色背景色
2 回答
选择图像后,ToolBar的高度为0 . 您可以在“调试视图层次结构”中看到这一点 .
要解决这个问题,只需删除约束“Toolbar.top = Image Picker View.bottom 192”
您需要删除此行:
你真的不需要这个,因为图像选择器已经关闭 . 此函数将关闭当前视图控制器 .
此外,尝试在更新UI对象时使用dispatch_async .