You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图片编辑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方法来传递图片:

  1. 给ViewController1到ViewController2的segue设置一个identifier(比如goToVC2)
  2. 在ViewController1中实现:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "goToVC2" {
        let vc2 = segue.destination as! ViewController2
        vc2.selectedImage = sender as? UIImage
    }
}
  1. 然后在图片选择完成的代理方法里调用:performSegue(withIdentifier: "goToVC2", sender: selectedImage)

这样整个流程就完整啦,你可以根据自己的需求调整细节,比如添加图片编辑功能、优化图片显示效果等~

内容的提问来源于stack exchange,提问作者ishtyaq haider jafri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:24:53