Увеличить 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;
}
}
Кто-нибудь может увидеть, в чем может быть проблема? Есть ли ошибка в коде, или я (как я подозреваю) оставил какую-то важную часть этого уравнения для плавного масштабирования в крайнем случае?