Увеличить SKSpriteNode в / из в направлении направления точки (щепотка)

У меня есть игра Spritekit и SKSpriteNode (mapContainer), который является картой, и эта карта находится внутри другого SKSpriteNode (rightCon), который является его контейнером. При сжатии / удалении я хочу увеличить / уменьшить масштаб карты.

Я нашел код в Интернете и смог получить что-то, что, кажется, работает, но это не совсем правильно.

Проблема в том, что как только я начинаю пинч, он немного подпрыгивает (я имею в виду, что карта заметно смещается, а не движется плавно), а затем плавно увеличивается / уменьшается в направлении пинча. И я не уверен почему.

- (void)rightConPTZ:(UIPinchGestureRecognizer *)recognizer {

    CGPoint touchLocation = [recognizer locationInView:recognizer.view];
    touchLocation = [self convertPointFromView:touchLocation];

    CGPoint pointInMap = [rightCon convertPoint:touchLocation fromNode:self];

    if (recognizer.state == UIGestureRecognizerStateChanged) {
        float scale = recognizer.scale-lastScale;

        mapContainer.xScale += scale;
        mapContainer.yScale += scale;

        float centerX = 0;
        float centerY = 0;

        float offsetToCenterX = centerX-pointInMap.x;
        float offsetToCenterY = centerY-pointInMap.y;

        float multiX = offsetToCenterX*mapContainer.xScale;
        float multiY = offsetToCenterY*mapContainer.xScale; //xscale & yscale are the same (and always will be)

        float zoomInFactor = 2;

        float scaleDiff = (zoomInFactor - mapContainer.xScale) / (zoomInFactor - 1.0f);

        float multiX2 = offsetToCenterX*scaleDiff;
        float multiY2 = offsetToCenterY*scaleDiff;

        float subX = multiX-multiX2;
        float subY = multiY-multiY2;

        mapContainer.position = CGPointMake(subX, subY);

        lastScale = recognizer.scale;
    } else if (recognizer.state == UIGestureRecognizerStateEnded) {
        lastScale = 1.0;
    }
}

Кто-нибудь может увидеть, в чем может быть проблема? Есть ли ошибка в коде, или я (как я подозреваю) оставил какую-то важную часть этого уравнения для плавного масштабирования в крайнем случае?

0 ответов

Другие вопросы по тегам