Zoomen und scrollen Sie mit SKNode in SpriteKit

Ich arbeite an einem Spiel wie Scrabble auf SpriteKit und bin beim Zoomen und Scrabble-Scrollen hängen geblieben. Lassen Sie mich zuerst die Arbeitsweise hinter dem Spiel erklären: Auf meiner GameScene habe ich:

Eine SKNode-Unterklasse mit dem Namen GameBoard Layer (NAME_GAME_BOARD_LAYER), die folgende untergeordnete Elemente enthält:

A SKNode subclass for Scrabble Board named NAME_BOARD.
A SKNode subclass for Letters Tile Rack named NAME_RACK.

Die Buchstabenkacheln werden aus dem Kachelregal genommen und auf das Scrabble Board gelegt.

Das Problem hierbei ist, dass ich das Zoomen und Scrollen imitieren muss, das mit UIScrollView erzielt werden kann, das meiner Meinung nach nicht auf einem SKNode hinzugefügt werden kann. Die Funktionen, die ich imitieren muss, sind:

Zoomen Sie genau an die Stelle, an der der Benutzer Double-Tapped hatScrollen (Versucht PanGestures, schafft irgendwie Problem mit Kacheln Drag-Drop)Behalten Sie den gezoomten SKNode in dem bestimmten Bereich bei (wie UIScrollView behält der gezoomte Inhalt in den Grenzen von scrollView bei)

Hier ist der Code, den ich zum Zoomen mit UITapGestures verwendet habe:

In meiner GameScene.m

- (void)didMoveToView:(SKView *)view {
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                             action:@selector(handleTapGesture:)];
tapGesture.numberOfTapsRequired = 2;
tapGesture.numberOfTouchesRequired = 1;
[self.scene.view addGestureRecognizer:tapGesture];
}

- (void)handleTapGesture:(UITapGestureRecognizer*)recognizer {
if ([self childNodeWithName:NAME_GAME_BOARD_LAYER]) {
    GameBoardLayer *gameBoardLayer = (GameBoardLayer*)[self childNodeWithName:NAME_GAME_BOARD_LAYER];

    SKNode *node = [Utils nodeAt:[recognizer locationInView:self.view]
                        withName:NAME_BOARD
                   inCurrentNode:gameBoardLayer];

    if ([node.name isEqualToString:NAME_BOARD]) {
        [gameBoardLayer handleDoubleTap:recognizer];
    }

}
}

In meinem GameBoardLayer-Knoten:

- (void)handleDoubleTap:(UITapGestureRecognizer*)recognizer {
Board *board = (Board*)[self childNodeWithName:NAME_BOARD];
if (isBoardZoomed)
{
    [board runAction:[SKAction scaleTo:1.0f duration:0.25f]];
    isBoardZoomed = NO;
}
else
{
    isBoardZoomed = YES;
    [board runAction:[SKAction scaleTo:1.5f duration:0.25f]];
}
}

Würde mich jemand freundlich leiten, wie ich diese Funktionalität erreichen kann?

Vielen Dank an alle.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage