【问题标题】:how can i make zoom like in google maps我怎样才能像谷歌地图一样放大
【发布时间】:2013-06-30 01:23:59
【问题描述】:

我正在开发一个带有一些游戏领域的游戏,它是在一些视图中绘制的。我的游戏区域总是相对于他的中心绘制,所以我只是简单的捏

- (void)pinch:(UIPinchGestureRecognizer *)gesture
{
if ((gesture.state == UIGestureRecognizerStateChanged) ||
    (gesture.state == UIGestureRecognizerStateEnded)) {
    self.gameBoardGridView.scale *= gesture.scale; // adjust our scale

    gesture.scale = 1;  
}

和平移

-(void)pan:(UIPanGestureRecognizer *)recognizer
{
CGPoint translatedPoint = [recognizer translationInView:self.gameBoardGridView];


self.gameBoardGridView.gridCenter = CGPointMake(self.gameBoardGridView.gridCenter.x + translatedPoint.x, self.gameBoardGridView.gridCenter.y + translatedPoint.y);

[recognizer setTranslation:CGPointMake(0, 0) inView:self.gameBoardGridView];
}

但我需要其他类型的缩放。当您放下两根手指然后移动其中一根时,该区域会按应有的方式扩展(放大),但手指下方的像素不再位于手指下方。图像从图像中心缩放,而不是两个手指之间的中点。

我尝试了很多示例,但都没有我想要的效果。最后我写了这个,它几乎正确,但不完全

- (void)pinch:(UIPinchGestureRecognizer *)gesture
{
CGFloat curScale = gesture.scale;

static CGPoint startPoint;

if (gesture.state == UIGestureRecognizerStateBegan) {
    startPoint = [gesture locationInView:self.gameBoardGridView];
}


if ((gesture.state == UIGestureRecognizerStateChanged) ||
    (gesture.state == UIGestureRecognizerStateEnded)) {
    self.gameBoardGridView.scale *= gesture.scale;

    CGFloat widthDelta = self.gameBoardGridView.gridWidth * fabs(gesture.scale - 1) / 3;
    CGFloat heightDelta = self.gameBoardGridView.gridHeight * fabs(gesture.scale - 1) / 3;


    gesture.scale = 1;

    CGPoint lastPoint = self.gameBoardGridView.gridCenter;

    const CGFloat epsilon = 5;

    CGFloat coef = 1.0;
    if(curScale < 1) {
        coef = -1.0;
    }

    if (startPoint.x + epsilon < self.view.frame.size.width / 2) {
            lastPoint.x += widthDelta*coef;
    }
    else if (startPoint.x - epsilon > self.view.frame.size.width / 2) {
            lastPoint.x -= widthDelta*coef;
    }

    if (startPoint.y + epsilon < self.view.frame.size.height / 2) {
            lastPoint.y += heightDelta*coef;
    }
    else if (startPoint.y - epsilon > self.view.frame.size.height / 2) {
            lastPoint.y -= heightDelta*coef;
    }


    self.gameBoardGridView.gridCenter = lastPoint;
}
}

可能还有其他方法可以做到这一点?

【问题讨论】:

    标签: ios objective-c uipinchgesturerecognizer


    【解决方案1】:

    缩放的中心是图像的锚点。 您要做的就是将锚点更改为手指的中点,位置和位置。 我自己没试过买我在这里看到了一个完整的解决方案,也许它会对你有所帮助 -

    https://github.com/robertblackwood/CCPanZoomController

    【讨论】:

      【解决方案2】:

      您是否尝试过使用UIScrollView?我做了类似的事情。我开始使用本教程,然后为我的应用添加了一些特定代码。

      http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content

      【讨论】:

        猜你喜欢
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多