pet*_*ete 32 uiimagepickercontroller ipad ios swift
从iOS 9和Xcode 7开始,我无法再在iPad(设备和模拟器)上实现UIImagePickerController.以下代码适用于iPad,但仅适用于iOS 9.使用iOS 9+时,显示的图像(在UIImagePickerController被取消后)是所选图像的错误版本.没有重新调整大小或裁剪最终图像只是原始图像的右上角?? 另外一个问题 - 如果imagePicker.allowsEditing = false,你无法从PhotoLibrary中选择图像?
@IBAction func photoButton(sender: AnyObject) {
imagePicker.allowsEditing = true
imagePicker.sourceType = .PhotoLibrary
self.presentViewController(imagePicker, animated: false, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
self.imageView.image = pickedImage
dismissViewControllerAnimated(true, completion: { () -> Void in
})
}
Run Code Online (Sandbox Code Playgroud)
下面是UIImagePickerController中显示的选定图像的示例.(注意所选图像如何呈现非常小而不像以前那样呈现屏幕的全尺寸/宽度)
在UIImagePickerController中选择使用按钮后,最终图像仅在原始图像的右上角.我在做错了什么或是在iOS 9上破坏了UIImagePickerController?
MPa*_*ulo 11
这是Apple的一个错误:http: //openradar.appspot.com/radar?id = 5032957332946944
当前糟糕的解决方法:
if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
imagePicker.allowsEditing = false
} else {
imagePicker.allowsEditing = true
}
Run Code Online (Sandbox Code Playgroud)
Swift 3.0:
if UIDevice.current.userInterfaceIdiom == .pad {
}
Run Code Online (Sandbox Code Playgroud)
您需要确保您的图像视图具有正确的框架,并且图像视图的内容模式应该是宽高比,并且选择器返回的图像是类型[UIImagePickerControllerOriginalImage]
[imageView setFrame:imageViewRect];
[imageView setContentMode:UIViewContentModeScaleAspectFit];
Run Code Online (Sandbox Code Playgroud)
迅速:
imageView.setFrame(imageViewRect)
imageView.setContentMode(UIViewContentModeScaleAspectFit)
Run Code Online (Sandbox Code Playgroud)
来到allowsEditing酒店,与照片选择无关。
它是一个布尔值,指示是否允许用户编辑所选的静态图像或电影。
如果你想从相机库中选择照片,那么你需要将来源类型修改为
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
Run Code Online (Sandbox Code Playgroud)
更新:
假设您选择了一张图像并将其显示在图像视图上。我假设视图上有一个图像视图,并且图像视图框架等于视图框架。如果 IB 是自由形式的,我假设 IB 中图像视图帧的大小为 600x600。
如果你只是这样做:
_startImageView.image=_img;
Run Code Online (Sandbox Code Playgroud)
结果将是:
现在让我们对要在 imageview 中显示的图像进行一些更改:
CGRect scaledRect = AVMakeRectWithAspectRatioInsideRect(_img.size, CGRectMake(0, 0, self.startImageView.frame.size.width, self.startImageView.frame.size.height));
UIGraphicsBeginImageContext(CGSizeMake(_startImageView.frame.size.width,_startImageView.frame.size.height));
[_img drawInRect:scaledRect];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
_startImageView.image=scaledImage;
Run Code Online (Sandbox Code Playgroud)
现在图像将是:
未缩放时选择的原始图像尺寸为 640x426 。
当缩放到最大时(使用两根手指缩放操作),选择的原始图像尺寸为 1536x1286 。
正如你所看到的,图像仍然没有巨大的变化,这是因为当你的 imageview 收到图像时图像已经被裁剪/缩放了!
所以即使你尝试这样做:
[_img drawInRect:_startImageView.frame];
Run Code Online (Sandbox Code Playgroud)
图像不会根据我们的需要绘制,因为图像已经在此时缩放,因为选择器给出的图像是edited image.
解决方案:
要解决此问题,您需要从didFinishPickingMediaWithInfo:方法中的选择器中选择原始图像
info[UIImagePickerControllerOriginalImage];
Run Code Online (Sandbox Code Playgroud)
这给你的图像: