0

我正在创建一个应用程序,用户可以在其中将他们的日程表加载到应用程序中,然后显示它。

当允许在加载前编辑图像时,它会完美显示:

图 1

一旦用户“选择”了图像,它就会以UIImageView模糊的形式出现:

图 2

这里稍微放大:

图 3

我知道图像分辨率还可以,因为图像可以预先完美显示。 我怎样才能阻止它变得模糊?

我正在使用放大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;
}
}

谢谢!

4

1 回答 1

2

iOS 在缩放视图时不会重绘视图,它只是向上或向下缩放视图。底层实现基本上是一个带纹理的 OpenGL 多边形,这就是缩放如此之快的原因。以更高的分辨率重新生成纹理很慢,因此 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;
于 2012-04-18T23:02:53.853 回答