2010-12-06 17 views
0

ScrollViewズームでこの問題が発生しました。そこには多くの記事がありますが、どういうわけか私は適切な説明、チュートリアルまたはコードスニペットを見つけることができません。iPhone:スクロールビューから画像のみをズームする方法

私は全画面スクロールビューを持ち、フルスクリーン画像ビュー内にあります。画像ビューの内部では、AspectFit画像をロードします(縦横どちらでもかまいませんが、水平のものは上下に黒いスペースがあります)。ズームを行うと、画像だけでなく周囲の領域(画像ビューの残りの部分)もズームします。さらに、ズームしながらシミュレータを回転させると、画像は開始時のように中央に表示されるのではなく、右上隅に移動します。画面の外に出るピクセルはほとんどありません。

イメージビュー全体ではなく、イメージをズームすることが本当に好きです。または、ズームしたときに常にイメージの中央に配置してください。

任意の歓迎..

答えて

1

私はこの問題を解決しましたが、これは最良のコードではありませんが、今は私にとってはうまくいきます。ここに投稿すると、多分それは誰かを助けるでしょう:)

UIImage *img = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
            pathForResource:someImage ofType:@"jpg"]]; 
CGFloat scale; 
    if (scrollView.frame.size.width < scrollView.frame.size.height) // portrait 
     scale = scrollView.frame.size.width/img.size.width; 
    if (scrollView.frame.size.width > scrollView.frame.size.height) // landscape 
     scale = scrollView.frame.size.height/img.size.height; 

imgView.frame = CGRectMake(scrollView.frame.origin.x, scrollView.frame.origin.y, 
          img.size.width*scale, img.size.height*scale); 
imgView.center = CGPointMake(scrollView.frame.size.width/2, scrollView.frame.size.height/2); 

[imgView setImage:img]; 

[scrollView setZoomScale:scale]; 
0

PhotoScrollerの例から。 layoutSubviewsにこれを追加します。

// center the image as it becomes smaller than the size of the screen 

CGSize boundsSize = self.bounds.size; 
CGRect frameToCenter = imageView.frame; 

// center horizontally 
if (frameToCenter.size.width < boundsSize.width) 
    frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2; 
else 
    frameToCenter.origin.x = 0; 

// center vertically 
if (frameToCenter.size.height < boundsSize.height) 
    frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2; 
else 
    frameToCenter.origin.y = 0; 

imageView.frame = frameToCenter; 

は、これが唯一の画像をズームすると助けにはなりませんが、それはそれはあなたが、少なくともそれを拡大すると中心にしておこう。

+0

どこに置くべきですか? :)私はimgView.image = [UIImage imageNamed:whichNext]でイメージを変更します。私は本当に画像付きRectを初期化しません。私はimageViewの内容を変更するだけです。 – yosh

+0

これをlayoutSubviewsに配置します。作成するときにUIImageViewのフレームを初期化しないとうまくいきます。初期化する画像のサイズになります(ただし、新しいサイズサイズを変更するには '[sizeToFit]'を呼び出す必要があります)。上記のように、この場合でもサイズは変更されません。その起源を変更しているだけなので、ズームアウトするとその中心になります。 – Ertebolle

関連する問題