2016-07-29 39 views
1

Ich versuche einige Animationen innerhalb einer UIView Unterklasse zu orchestrieren, die eine Änderung der inneren Größe der Ansicht erfordern.Probleme beim Animieren von NSLayoutConstraint beim Ändern der Größe

Im CATransaction Abschlussblock rufe ich invalidateIntrinsicContentSize() an, um die Größenänderung widerzuspiegeln, und gleich danach animiere ich meine Einschränkungen.

self.layoutIfNeeded() 
UIView.animateWithDuration(2) { 
    NSLayoutConstraint.deactivateConstraints(oldConstraints) 
    NSLayoutConstraint.activateConstraints(newConstraints) 
    self.layoutIfNeeded() 
} 

Aber eine seltsame Sache passiert, zusammen mit den vorgesehenen Beschränkungen der deactivateConstraints und activateConstraints Methoden, sehe ich auch die Größe der Ansicht entlang der gleichen Dauer animiert werden.

Hier ist ein Video von diesem in Aktion.

https://www.youtube.com/watch?v=OgM378Wryd0

Hier ist ein Diagramm des Problems.

enter image description here

Meine Absicht ist es, die Größe der Ansicht sofort zu ändern, und es nicht zusammen mit den Positionsbedingungen zu animieren.

+0

Warum verwenden Sie die animateWithDuration-Methode, wenn Sie nicht animieren möchten? –

+0

Meine Absicht ist es, die Position zu animieren, nicht die Größe. –

Antwort

1

Eine Lösung, die am Ende funktioniert, ist das Umbrechen des ursprünglichen Aufrufs layoutIfNeeded() in einen Animationsblock und das anschließende Initiieren der Positionsanimation.

Es sieht nicht hübsch aus, da ich nicht wirklich Größenänderungen animiere, möchte ich, dass sie sofort passieren. Ich suche also immer noch nach einer eleganten Lösung oder einem Grund, warum es keinen geben kann.