0

ユーザーが自分のスケジュールをアプリにロードして、その後表示できるアプリを作成しています。

ロードする前に画像を編集できるようにすると、画像は完全に表示されます。

画像1

ユーザーが画像を「選択」すると、画像はUIImageViewぼやけて表示されます。

画像2

ここでは少しズームインしています:

画像3

画像は事前に完全に表示されるので、画像の解像度は問題ないことを私は知っています。 これがぼやけるのを防ぐにはどうすればよいですか?

でズームインする基本的な方法を使用してUIImageViewUIScrollViewます。

これが私が画像を割り当てるために使用するコードです。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 に答える