2011-01-23 9 views
2

これは、私には驚異的な割合の頭痛を引き起こしています。UIScrollViewの中に深いネストされたサブビューをスケーリングする

iPad用のUML描画アプリケーションを作成しようとしています。

私は現在、クラスを 'キャンバス'に追加する機能を持っています。キャンバスは単にUIScrollView内にあるUIViewです。

各クラス要素は、クラス名、属性、およびメソッド(UITextFields)を含むUIViewです。これらはすべてキャンバスのサブビューです。

私が抱えている問題は、ピンチ/ズーム機能を使用してクラスを拡大するときです。ちょうどぼやけているUITextFieldsです。 UIScrollViewは変換を適用するだけで、スケーリング自体を処理する必要があるからです。

私が考えることができる唯一の方法は、クラスを再描画してより大きなものにすることです。その結果、互いの相対的な配置が歪む可能性があります。たとえば、2つのクラスが並んでいて、サイズが2倍になっている場合、左側のクラスは右側のクラスと重なることがあります。

私は何時間もソリューションを探していましたが、私はどこにもいません。私のような状況を説明できるコードサンプルやアドバイスを知っている人はいますか?または、そうでない場合は、私が記述した方法でUITextField(またはUILabel)をどのように拡大縮小するかを示す例ですか?

答えて

2

私の質問がどのように表現されたかに基づいて、これが最も明白な答えではないかもしれないと思います。しかし、私はそうのような問題を解決:

最初のステップは、実装することです:私は(何とか)が欠落しているように見えた

- (void)scrollViewDidEndZooming:(UIScrollView 
*)scrollView withView:(UIView *)view atScale:(float)scale; 

キーポイントはUIScrollViewのがスケーリングされたときにということでした、それはその後、スケールファクタを1にリセットします。つまり、ズームして125%にズームした後、25%をズームアウトしたとすると、元のビューは実際には93%(ish)であり、100%ではありません。

私の場合と同じように、元のサイズと比較してサブビューを拡大しようとすると、明らかに図面がスローされます。

次に、スケールのトラックを保存する(私は変数scaleTrackerを使用しました)、この値を使用してビューを拡大/縮小します。

具体的には私の問題のために、次のコードを使用した

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale 
{ 

scaleTracker *= scale; 

[canvas setTransform:CGAffineTransformIdentity]; 

canvas.frame = CGRectMake((int)canvas.original.origin.x, 
           (int)canvas.original.origin.y, 
           (int)(canvas.original.size.width * scaleTracker), 
           (int)(canvas.original.size.height * scaleTracker)); 
} 

幸運UIScrollViewのに問題があります他の誰にも。今のところ私はこれが興味のある人に何らかの助けを与えることができることを願っています。

+0

あなたはhttp://stackoverflow.com/q/19856928/935381について考えていますか? – Hitarth

関連する問題