图片编辑App开发:实现ViewController1选图后在ViewController2显示
没问题,我来帮你捋清楚这个图片选择和跨页面展示的实现流程,下面是一步步的具体方案,我用Swift来举例,Objective-C的思路是完全一致的哦:
第一步:配置系统权限
不管是访问相册还是相机,都需要在Info.plist中添加权限描述,否则应用会直接崩溃或者被App Store拒绝:
- 相册权限:添加
Privacy - Photo Library Usage Description,值填“需要访问您的相册以选择图片”(可以自定义文案) - 相机权限:添加
Privacy - Camera Usage Description,值填“需要访问您的相机以拍摄图片”
第二步:在ViewController1中实现图片选择逻辑
首先让ViewController1遵循UIImagePickerControllerDelegate和UINavigationControllerDelegate协议,然后分别实现相册按钮和相机按钮的点击事件:
相册按钮点击事件
@IBAction func albumButtonTapped(_ sender: UIButton) { let imagePicker = UIImagePickerController() imagePicker.sourceType = .photoLibrary imagePicker.delegate = self imagePicker.allowsEditing = false // 如果需要让用户裁剪图片,设为true即可 present(imagePicker, animated: true) }
相机按钮点击事件
记得先判断设备是否支持相机(比如部分iPad没有相机):
@IBAction func cameraButtonTapped(_ sender: UIButton) { guard UIImagePickerController.isSourceTypeAvailable(.camera) else { // 弹出提示告知用户设备不支持相机 let alert = UIAlertController(title: "提示", message: "当前设备无法使用相机功能", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) return } let imagePicker = UIImagePickerController() imagePicker.sourceType = .camera imagePicker.delegate = self present(imagePicker, animated: true) }
实现图片选择完成的代理方法
在这个方法里获取选中的图片,然后跳转到ViewController2并传递图片:
extension ViewController1: UIImagePickerControllerDelegate, UINavigationControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // 先关闭图片选择器 picker.dismiss(animated: true) // 获取选中的原图(如果开启了编辑,也可以用.editedImage获取编辑后的图片) guard let selectedImage = info[.originalImage] as? UIImage else { return } // 跳转到ViewController2并传递图片 let vc2 = ViewController2() vc2.selectedImage = selectedImage // 如果是用导航控制器push跳转,用下面这句 navigationController?.pushViewController(vc2, animated: true) // 如果是模态跳转,用这句:present(vc2, animated: true) } // 用户取消选择时的处理 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true) } }
第三步:在ViewController2中接收并展示图片
首先在ViewController2里定义一个接收图片的属性,然后把图片设置给UIImageView:
class ViewController2: UIViewController { // 用来接收从ViewController1传递过来的图片 var selectedImage: UIImage? // 假设你已经在Storyboard/XIB中拖好了一个UIImageView,或者用代码创建 @IBOutlet weak var displayImageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // 设置图片到ImageView displayImageView.image = selectedImage // 可以设置图片的显示模式,比如自适应缩放 displayImageView.contentMode = .scaleAspectFit } }
额外小提示
如果你是用Storyboard来做页面跳转的,可以用prepareForSegue方法来传递图片:
- 给ViewController1到ViewController2的segue设置一个identifier(比如
goToVC2) - 在ViewController1中实现:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "goToVC2" { let vc2 = segue.destination as! ViewController2 vc2.selectedImage = sender as? UIImage } }
- 然后在图片选择完成的代理方法里调用:
performSegue(withIdentifier: "goToVC2", sender: selectedImage)
这样整个流程就完整啦,你可以根据自己的需求调整细节,比如添加图片编辑功能、优化图片显示效果等~
内容的提问来源于stack exchange,提问作者ishtyaq haider jafri
相关产品推荐
相关产品推荐

