繁体   English   中英

用捏手势限制平移手势

[英]Limit Pan Gesture with Pinch Gesture

我正在Spritekit中创建一个游戏,并且正在使用“平移手势”和“捏捏手势”以查看地图。 目前,我将“捏手势”的缩放比例限制为2.0比例。 我正在尝试将“平移手势”限制在屏幕的边界,即使缩放时也是如此。 地图比屏幕大,我只希望用户能够平移,直到地图的外边缘碰到屏幕的外边缘,即使缩放也是如此。 这是我尝试处理这种情况的业余方式:

-(void) handlePanFrom:(UIPanGestureRecognizer*)recognizer {
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        [recognizer setTranslation:CGPointZero inView:recognizer.view];
    } else if (recognizer.state == UIGestureRecognizerStateChanged) {
        CGPoint translation = [recognizer translationInView:recognizer.view];
        translation = CGPointMake(-translation.x, translation.y);
        CGPoint desiredPos = CGPointSubtract(_mapNode.position, translation);
        NSLog(@"Moving map to x: %f y: %f", desiredPos.x, desiredPos.y);
        NSLog(@"Map node position x: %f y: %f", _mapNode.position.x, _mapNode.position.y);
        NSLog(@"Map scale is %f", mapScale);
        NSLog(@"Map size is x: %f y: %f", _mapNode.map.frame.size.width, _mapNode.map.frame.size.height);

        if (desiredPos.y <= (mapScale * 300) && desiredPos.y >= ((1/mapScale) * 200)) {
            _mapNode.position = CGPointMake(_mapNode.position.x, desiredPos.y);
            [recognizer setTranslation:CGPointZero inView:recognizer.view];
        }

        if (desiredPos.x <= (mapScale * 250) && desiredPos.x >= ((1/mapScale) * 77)) {
            _mapNode.position = CGPointMake(desiredPos.x, _mapNode.position.y);
            [recognizer setTranslation:CGPointZero inView:recognizer.view];
        }
    } else if (recognizer.state == UIGestureRecognizerStateEnded) {

    }
}

缩放以获得节点的比例时,我设置了比例iVar。 我应该能够使用节点的大小( _mapNode.mapSKSpriteNode )和屏幕大小来获得所需的平移。

我以为我可以做scale*xMax(1/scale)*xMin (也有y位置),但这似乎不起作用。 我希望在那里没有硬数字(300、200等),并使用节点/屏幕/等的大小来限制平移。 任何帮助表示赞赏! 谢谢!

好的,这就是我为将来的工作做的参考。

我首先创建了两个iVar:一个用于节点的初始x位置,另一个用于初始y位置。 然后,我通过以下方法计算出“可移动距离”: sizeOfNode * 0.5 * scale并减去screenSize * 0.5 只要desiredLocation <= (initialPos + movableDistance)desiredLocation <= (initialPos + movableDistance)的位置desiredLocation >= (initialPos - moveableDistance)您就可以更改节点的位置。 您可以同时针对x和y执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM