0

UIScrollView のスクロール/パン機能を使用したいのですが、すべてのズームとスケーリングを自分で処理したいと考えています。私の現在の計画は、複数の UIView と UIScrollView を子として持つ UIView (view1 と呼びます) を所有する viewController を持つことです。

view1 がすべてのマルチタッチ イベントを処理し (すべての子のズーム状態を手動でレンダリングするために)、結果をそれぞれのスクロール ビューに描画して、ユーザーが結果をスクロールできるようにすることは可能ですか?

(興味深いことに、アプリケーションは複数のヒートマップを描画し、それぞれに独自の軸セットがあります。ズームまたはスクロール中に、データ領域 (スクロール ビュー) で表される範囲に正しくラベルを付けるために、軸を更新する必要があります。理由scrollView で無料で提供されるデフォルトの context-image-scaling ズームを使用できないのは、コンテキスト ズームに描画されたもの (参照線などを含む) がズームすることです。データ範囲。)

4

2 に答える 2

4

実際、メインのホスティング ビューでマルチタッチ イベントをインターセプトし、基になる UIView をプログラムでスケーリングすることができます。これは、アプリケーションの OpenGL 表示部分で行うことです(ソースはこちらから入手できます)。パンなどのために、シングルタッチ イベントを基になるスクロール ビューに渡すこともできます。

ただし、タッチイベントをインターセプトせずに、説明したことを実行する方法がまだある場合があります。UIScrollView は、コンテンツ ビューに変換を適用することで、デフォルトのスケーリングを行います。この質問への回答として、ピンチ ズームが終了したら、コンテンツ ビューを新しいスケールで再レンダリングする方法を説明します。これにより、ズームが完了したら、シャープなグリッド線で描画を更新できます。

さらに、実際にスケーリングしておらず、ピンチズームでビューの別のプロパティを変更したい場合は、その質問で説明したことを実行して、contentView の変換の設定をインターセプトすることができます。適用しないでください。変身。UIScrollView がその変換から設定したいスケールを抽出し、それに応じてビューの独自のカスタム再描画を行うことができます。

于 2009-02-04T22:12:35.927 に答える
0

ブラッドさん、ご提案ありがとうございます。私が最終的に使用した解決策は、 UIScrollView を拡張し、これで touchesMoved:withEvent: メソッドをオーバーライドすることでした:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([[event touchesForView:self] count] == 1) 
         [super touchesMoved:touches withEvent:event];
    [content touchesMoved:touches withEvent:event];
}

ここで、「コンテンツ」はスクロールビューのコンテンツ サブビューへのポインターです。コンテンツがポイントにズームする必要があるため (つまり、ユーザーの指の下にあるデータ空間のポイントは変更されるべきではありません)、このようにする必要がありました。setTransform: に送信される情報は、コンテンツ フレームのサイズのみを教えてくれますが、オフセットも必要です。

于 2009-02-13T17:38:59.533 に答える