2016-04-22 9 views
2

Ich arbeite an einem Projekt, bei dem Benutzer Schach spielen können. Ich habe eine Elternansicht, die eine Tafel darstellt, jedes Quadrat wird der Tafel als Unteransicht hinzugefügt. Schachfigur ist eine UIImageView und wird als Unteransicht zu einem Quadrat hinzugefügt.Animiere UIImageView von einer Unteransicht zur übergeordneten Ansicht

occupyingPieceImageView = UIImageView(frame: CGRectMake(0, 0, size, size)) 
    self.addSubview(occupyingPieceImageView) 

Um einen Schachzug ich von einem Platz zu einem anderen wollen animieren die Position des Stückes ändern, verstehe ich, dass bedeutet, dass die UIImageView des Rahmens zu ändern, aber ich weiß nicht, wie der Rahmen nur ist er innerhalb der Elternansicht (Quadrat). Das funktioniert nicht:

func move(destSquare: Square){ 
    var imgView = self.occupyingPieceImageView 
    var thisPiece = self.piece 
    UIView.animateWithDuration(3, animations: { 
     self.clearPiece() 
     imgView.frame = destSquare.frame 
    }) 
    destSquare.setPiece(thisPiece) 
} 

Antwort

2

Erwägen Sie, Ihre Stücke auf der Platine selbst statt Quadrate hinzuzufügen. Diese Architektur ermöglicht es Ihnen, jede Bewegung zu animieren, auch wenn Sie ein Stück auf die Linie zwischen zwei Quadraten legen.

+0

Ich überlege, das auch zu tun, aber dafür muss ich das Design ändern. Gibt es noch eine andere Möglichkeit? – phuong

+0

Sie können clipsToBounds für alle Quadrate auf false setzen. Dann können Sie Bewegungen mithilfe von Rahmen animieren, deren Ursprung außerhalb der Ansicht liegt (z. B. (-100, -100, 50, 50)). Nachdem die Animation beendet ist, können Sie im Completion-Block die Koordinaten für das neue Quadrat neu berechnen und removeFromSuperView und sofortSubview auf einem neuen Quadrat hinzufügen. Dies wäre wirklich ineffizient, sollte aber funktionieren. – Terminus

Verwandte Themen