2017-06-14 103 views
0

我挑选的图像从照片:的UIImageView帧是正确的,contentMode是正确的,不能正确显示图像

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    let imageCropper = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ImageCropperVC") as! ImageCropperViewController 
    imageCropper.delegate = self 
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage 

    picker.dismiss(animated: true, completion: nil) 
    present(imageCropper, animated: false, completion: { 
     imageCropper.imageView.image = image 
    }) 
} 

然后裁剪此图片:

@IBAction func crop(_ sender: UIButton) { 
    let croppedCGImage = imageView.image?.cgImage?.cropping(to: cropArea) 
    let croppedImage = UIImage(cgImage: croppedCGImage!) 
    delegate.processCroppedImage(image: croppedImage, cropper: self) 
} 

然后传递数据的集合视图细胞:

func processCroppedImage(image: UIImage, cropper: ImageCropperViewController) { 
    let imageData = UIImagePNGRepresentation(image)! as NSData 
    let i = Side(context: managedObjectContext) 
    i.image = imageData 
    imagePickerTarget!.knowledgeComponent = i 
    cropper.dismiss(animated: true, completion: nil) 
} 

当细胞获取数据,它这样做:

if let imageData = knowledgeComponent?.image { 
     if let image = UIImage(data: imageData as Data) { 
      buttonStack.isHidden = true 
      imageView.isHidden = false 
      imageView.image = image 
     } 
    } 

但图像显示不正常,它放大英寸

我查了值,

  • 所有视图的框架是正确的(300 * 400),
  • 图像的大小大致相同(301 * 401),
  • 图像的比例和插图是正确的

我看过每一个我可以找到的问题,但是他们都没有解决我的问题,我怀疑我的图像数据有问题,情况会是这样吗?如果不是,可能是什么?

这个错误让我不想用UIImageView了:(

+0

您是否尝试在裁剪之前显示图像?可能是'imageCropper'出现问题?尝试绕过裁剪并尝试显示结果,这种方式可以开始正确调试并捕获问题发生的位置。 – TawaNicolas

+0

@TawaNicolas我只是试过,这次它工作正常:) –

回答

0

我想我找到了问题(在某种程度上),感谢@ TawaNicolas的暗示,有一些错误的图片剪裁,即使图像尺寸是正确的,也许在iPad上300×400尺寸的图像不等于尺寸为300×400的imageView

无论如何,它似乎可以通过调整图像裁剪来改变结果, hooray!