2017-05-01 6 views
0

Ich habe eine benutzerdefinierte "Kartenansicht", die über eine entsprechende XIB verfügt, die die Unteransichten ausbildet. Ich verwende Beschränkungen, um die Unteransichten zu gestalten.CGAffineTransform bewirkt, dass sich Teilansichten abrupt bewegen

Ich füge die Kartenansicht einer anderen Ansicht hinzu und versuche dann, sie mit zu animieren.

Wenn ich die Animation triggere, verschieben sich die Teilansichten der Kartenansicht plötzlich abhängig vom rotationAngle. In der Zwischenzeit funktioniert der Rest der Animation wie erwartet; Es dreht sich in dem von mir angegebenen Winkel.

Meine Fragen sind: Warum ändern die Unteransichten die Position, wenn die Transformation beginnt und wie verhindere ich das?

Hier ist ein Beispiel für den Code, den ich verwende. view.layoutIfNeeded() und scheinen keinen Unterschied zu machen, FYI.

 let rotation = arc4random_uniform(20) 
     let destinationCenterY = self.frame.height + view.frame.height 
     let destinationCenterX = arc4random_uniform(UInt32(self.frame.width)) 
     let startTransform = CGAffineTransform(rotationAngle: CGFloat(rotation)) 

     UIView.animate(withDuration: 0.4, animations: { 
      view.transform = startTransform 
      view.center.y = destinationCenterY 
      view.center.x = CGFloat(destinationCenterX) 
      view.layoutIfNeeded() 
      view.autoresizesSubviews = true 
     }, completion: { (complete) in 
      view.removeFromSuperview() 
      view.transform = endTransform 
     }) 

Ich habe auch ein seltsames Problem mit Subviews Ändern der Größe, wenn CGAffineTransform scale verwendet. Jede Hilfe würde sehr geschätzt werden.

EDIT: Hinzufügen von Bildern von was passiert. Vor Animation sind Ansichten richtig ausgerichtet: before Nach Animation beginnt, die Subviews nach rechts bewegen: after

Antwort

1

Um zu verhindern, Meine Untersichten bewegten sich auf mir herum, als eine Transformation begann, ich musste die Untersichten durchlaufen und view.translatesAutoresizingMaskIntoConstraints = true wie folgt setzen:

for subview in view.subviews { 
    subview.translatesAutoresizingMaskIntoConstraints = true 
} 

Danke, @ DevB2F für mich in die richtige Richtung!

1

, wenn die automatischen Layout verwenden, bevor Animieren Sie einstellen müssen:

view.translatesAutoresizingMaskIntoConstraints = true 
+0

Ich versuchte dies und es hatte keine Wirkung. Ich habe die ursprüngliche Frage mit einigen Screenshots aktualisiert – OffensivelyBad

Verwandte Themen