2012-04-18 18 views
0

ユーザーが自分のスケジュールをアプリに読み込んで表示できるアプリを作成しています。UIImageViewで画像がぼやけて表示される

画像をロードする前に編集することが許可されている場合、それは完全に現れる:

Image 1

ユーザが画像を「選択」したら、それはぼやけUIImageViewに表示:

Image 2

ここではそれがわずかにズームさ:

Image 3

画像が完全に事前に表示されるため、画像の解像度は問題ありません。 これをどのようにぼかすことができますか?

UIScrollViewUIImageViewをズームする基本的な方法を使用しています。

ここに画像を割り当てるためのコードです。 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

ユーザーが画像を選択したときに(コード)はどうなりますか?イメージビューのイメージを再設定しているのか、イメージビューのプロパティを変更していますか? –

+0

コードが追加されました。私はそこに問題があるとは思わないが – DGund

+1

imageViewではなくPDFビューアを使ってみたことがありますか?問題は、ズームしたときに画像ビューが高解像度で再描画されないことです。 – endy

答えて

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; 
+0

これを私のアプリに直接コピーしたところ、違いはないようです。 iOSにイメージの再描画を指示するにはどうすればよいですか? – DGund

+1

実際に私は、画像ピッカーからeditedImageを使用することについての部分を見逃していました。 imagePathに保存されたファイルを確認して、実際に元の解像度に完全に達していることを確認しましたが、ぼやけていませんか?結局のところ、問題は結局ズームではないかもしれない。 –

+0

または、別の言い方をすると、editedImageの幅/高さをログに記録してみてください。少なくとも1280ピクセル幅ですか?そうでなければ、それをぼやけなくして400%(4 * 320)にズームする方法がないからです。 –

関連する問題