1

非常に大きなビューを表示するためのスクロール ビューを作成していますが、スクロールとズームの両方の機能が必要です (画像ビューアーのように)。これが私が取ったステップです:

  1. インターフェイス ビルダーで、ビュー コントローラーにスクロール ビューアーを配置しました。
  2. スクロール ビューアーにピンチ ジェスチャ レコグナイザーを追加しました。
  3. ジェスチャ イベントを処理するために、ジェスチャ レコグナイザーのアクションをコードに接続しました。
  4. ビュー コントローラーが読み込まれると、ビューの原点を中央に変更します (viewerスクロール ビューアーです)。self.viewer.contentOffset = CGPointMake(384, 512);
  5. ハンドラーのコードでは、イベントを次のように処理しました。

(startScale最初は 1.0 です)

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)sender {
    if(sender.state == UIGestureRecognizerStateEnded){
        startScale *= sender.scale;
    }else{
        float result = sender.scale * startScale;

        self.viewer.transform = CGAffineTransformMakeScale(result, result);
    }
}

アプリを実行すると、ジェスチャが認識され、スケーリングが正しく機能しますが、ビュー全体0,0が画面のポイント (左上) に対してスケーリングされます。写真を拡大するための自然なピンチ ジェスチャと同じように、ジェスチャを適用している中間点に対して拡大縮小する必要があります。

の原点も設定してみましself.viewer.frameたが、何も変わりませんでした。問題について検索したところ、次のものが見つかりました。

UIViewの原点参照を設定するには? (すでに試しました)

https://stackoverflow.com/questions/13163279/pinch-punch-gestures-center (私の問題についてですが、未回答)

Xcodeで画像をズームおよびパンするためのUIPinchGestureRecognizer(やり過ぎのように見え、私には複雑すぎます。これが本当に私の状況に役立つかどうかはわかりません)

スクロールビューで自然なピンチを実現するにはどうすればよいですか?何が間違っていますか?

ありがとう、カン。

4

1 に答える 1

2

この問題に対する答えは非常に簡単です。ピンチ ジェスチャを完全に削除します。UIScrollView を使用する利点は、内部でパン/ズームを処理し、何もする必要がないことです。

編集:コンテンツが適切にスケーリングされていることを確認するには、すべてのコンテンツを配置する場所UIView(呼び出されたcontentViewものまたは必要なもの)が必要になり、デリゲートメソッドでこれをUIScrollView行います:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return contentView;
}

これで問題が解決するはずです

編集2:また、最小/最大ズームスケールを設定することを忘れないでくださいUIScrollView

于 2012-11-23T14:36:50.753 に答える