2012-01-10 11 views
1

私は多少の文書を読んできましたが、私は非常に混乱していると言わざるを得ない。ここに私が現在セットアップしているものがあります。Scroll Views、Zooming and Zoom原点の混乱

iPadプロジェクトでは、子UIView(insetView)を含むUIScrollView(scrollView)があります。私のinsetViewscrollViewDidEndZoomingメソッドから返され、子ビューをズームするために厳密に使用されます。

insetViewは、scrollViewよりも小さく、中央に始まります。ユーザーがZoomにピンチすると、insetViewは元のサイズの2倍に拡大するか、元のサイズの半分に縮小することができます。

これはすべてうまく動作しますが、緩和したいのはちょっとした悩みがあります。ズームするためにピンチした場合、insetViewが縮小しますが、ズームの原点は左上隅のinsetViewです。つまり、insetViewは、左上の点がscrollViewのウィンドウに固定された状態で拡大して縮小します。

insetViewは、中心にズームアウトされ、scrollViewの中心に固定され、scrollViewより大きいサイズになるまで固定されます。その時点で、私はzoom originがピンチの真ん中か、少なくとも現在表示されている現在の部分の中心のinsetViewであることを望みますか?

これはどのように達成できますか?あなたのscrollViewDidZoom:デリゲートメソッドではこのような何かをしたい

答えて

2

:私の `scrollView`が私のディスプレイと同じサイズでない場合は

CGSize boundsSize = scrollView.bounds.size; 
CGRect frameToCenter = insetView.frame; 

if (frameToCenter.size.width < boundsSize.width) { 
    frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2.0f; 
} else { 
    frameToCenter.origin.x = 0.0f; 
} 

if (frameToCenter.size.height < boundsSize.height) { 
    frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2.0f; 
} else { 
    frameToCenter.origin.y = 0.0f; 
} 

insetView.frame = frameToCenter; 
+0

、' CGSize boundsSize = self.bounds.sizeいけません; 'line read' CGSize boundsSize = scrollView.bounds.size; '? – RLH

+0

申し訳ありません、そうです。私のプロジェクトのコードをコピーして編集しましたが、そのビットを正しく編集できませんでした。よく目撃された。それはあなたのために働くのですか? – mattjgalloway

+0

はい!ありがとうございました!私は実際には、else文を除いて、ある時点でこれを自分のコードに入れました。それは私のコードが行っていたことの欠けていた部分でした。そのコードなしで起こったバグは、上記のふるまいよりも厄介でした。私はこれを答えとしてマークしていますが、もう一つ質問があります。私の 'insetView'は' scrollView'のまま左下に固定されたままです。ピンチを解除すると、ディスプレイは再センタリングされます。ズーミングが影響を与えている間にこれを行う方法はありますか、それともそれだけで生活する必要がありますか?これはうまくいきますが、私は気まぐれで、アプリを磨くのが好きです! :) – RLH