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 回答