在iOS开发中,将图像从一个视图控制器(ViewController)传递到另一个视图控制器是一个常见的任务。以下是实现这一功能的基础概念、步骤和相关代码示例。
Show
)。prepare(for:sender:)
方法,将图像传递给目标视图控制器。override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowImageSegue" {
if let destinationVC = segue.destination as? ImageViewController {
destinationVC.image = selectedImage
}
}
}
在目标视图控制器中定义一个属性来接收图像:
class ImageViewController: UIViewController {
var image: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
if let image = image {
imageView.image = image
}
}
}
protocol ImageDelegate: AnyObject {
func didSelectImage(_ image: UIImage)
}
class SourceViewController: UIViewController, ImageDelegate {
func didSelectImage(_ image: UIImage) {
let destinationVC = ImageViewController()
destinationVC.image = image
navigationController?.pushViewController(destinationVC, animated: true)
}
}
class ImagePickerController: UIImagePickerController {
weak var imageDelegate: ImageDelegate?
override func didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[.originalImage] as? UIImage {
imageDelegate?.didSelectImage(image)
}
dismiss(animated: true, completion: nil)
}
}
func resizeImage(_ image: UIImage, toSize newSize: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
image.draw(in: CGRect(origin: .zero, size: newSize))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resizedImage ?? image
}
UIImage
的fixOrientation
方法。extension UIImage {
func fixOrientation() -> UIImage {
if self.imageOrientation == UIImage.Orientation.up {
return self
}
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
self.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))
let normalizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return normalizedImage ?? self
}
}
通过以上步骤和方法,可以有效地将图像从一个视图控制器传递到另一个视图控制器,并解决常见的相关问题。
没有搜到相关的文章