我正在创建一个应用程序,用户可以将其日程安排加载到应用程序中,然后显示它。
在加载前允许编辑图像时,它会完美显示:
用户“选择”图片后,会显示在UIImageView
模糊:
这里稍微放大了一下:
我知道图像分辨率还可以,因为图像预先显示完美。 如何阻止这种模糊?
我使用缩放UIImageView
中的UIScrollView
的基本方法。
这是我用来分配图像的代码。 zoomscroll是UIScrollView
,myschedule是UIImageView
:
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self dismissModalViewControllerAnimated:YES];
//Obtaining saving path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:@"myschedule.png"];
//Extracting image from the picker and saving it
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"]){
UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage];
NSData *webData = UIImagePNGRepresentation(editedImage);
[webData writeToFile:imagePath atomically:YES];
myschedule.image = editedImage;
[zoomscroll addSubview:myschedule];
zoomscroll.contentSize = CGSizeMake(myschedule.frame.size.width , myschedule.frame.size.height);
zoomscroll.minimumZoomScale = 1.0;
zoomscroll.maximumZoomScale = 4.0;
}
}
谢谢!
答案 0 :(得分:2)
iOS在缩放视图时不会重绘视图,只是向上或向下缩放视图。底层实现基本上是一个纹理OpenGL多边形,这就是缩放速度如此之快的原因。在更高的res重新生成纹理很慢,因此除非您明确告诉它,否则iOS不会这样做。
您可以通过多种方式解决此问题。最简单的可能是将滚动视图的contentSize设置为图像的实际大小,然后最初缩小,这样用户可以缩放而不是将图像的小版本缩放到400%(这会导致模糊)从25%到100%。像这样:
myschedule.image = editedImage;
myschedule.frame = CGRectMake(0, 0, editedImage.size.width, editedImage.size.height);
[zoomscroll addSubview:myschedule];
zoomscroll.contentSize = editedImage.size;
zoomscroll.minimumZoomScale = 0.25;
zoomscroll.maximumZoomScale = 1.0;
zoomscroll.zoomScale = zoomscroll.minimumZoomScale;