10

iOS 用の 2D パズルを作成しています。現在、UIPinchGestureRecognizer を使用してズームとスクロールを実装しようとしています。

ズームは次のように行われます。「ズーム ポイント」であるターゲット 2D ベクトルがあります。コードは次のとおりです。

glTranslatef(target.x, target.y, 0);
glScalef(scale, scale, 0);
glTranslatef(-target.x, -target.y, 0);

ターゲットは、この方法でジェスチャ レコグナイザーを使用して選択されています。

-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer
{
    if (UIGestureRecognizerStateBegan == [recognizer state])
    {
        view->setTarget([recognizer locationInView:self]);
    }
    // Rest of the code omitted
}

すべてがうまく機能します。

当初は iPAD 向けに設計されていましたが、iPhone や iPod でも動作するようにしたいと考えています。ただし、iPhone と iPod では縦横比が異なります。最初の画像の縦横比を維持するために、最初の Y スケールを少し大きくすることにしました。また、これにより、初期ズーム倍率でゲーム フィールドを上下にスワイプすることが可能になりました。コードは次のとおりです。

glTranslatef(target.x, target.y, 0);
glScalef(scale, scale * aspectRatio, 0);
glTranslatef(-target.x, -target.y, 0);

これは、ゲーム フィールドが画面の「中央」にある場合 (たとえば、ボットのスワイプ方向 (上下) に等しいスペースがある場合) に問題なく機能します。しかし、フィールドを上下にスワイプしてピンチ ジェスチャを開始すると、ゲーム フィールドは再び中央にジャンプします。

ジェスチャの位置をオフセットで変換する必要があることは理解していますが、3 日間正確にどのように変換するかはわかりません。

4

1 に答える 1

1

スワイプで行った翻訳量を保存し、 を呼び出すたびに、handlePinchGestureスワイプで保存した翻訳を適用します。

お役に立てば幸いです。

于 2012-05-16T11:29:44.760 に答える