2016-08-10 5 views
0

Kürzlich habe ich mit CGAffineTransform und CATransform3D auf Ansichten und Ebenen gearbeitet. Wenn ich die Transformation auf Ebenenebene und insbesondere auf Ansichtsebene anwende, sollten die Frames verknüpfter Ansichten nicht automatisch aktualisiert werden. Betrachten Sie beispielsweise folgendes Layout |H:[ViewA]-[ViewB]|. Wenn ich Transformation nur auf ViewA anwende.CGAffineTransform hat keinen Einfluss auf das automatische Layout

//We can either 
    ViewA.transform = CGAffineTransformMakeScale(1.5, 1.5) 
    ViewA.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.0) 

sollte nicht ViewB Auto Adjust es rect da ViewA Höhe, Breite oder Position nach der Transformation verändert hat. Ich habe auch versucht

self.view.layoutIfNeeded() 

Antwort

1

Transformations Aufruf beeinflusst nicht die Frame oder Bounds eine Ansicht oder der Rahmen wird in einem undefinierten Zustand sein. Um das zu illustrieren: image hast du eine rechteckige Ansicht mit einem Rahmen von X: 10, Y: 10, B: 100, H: 100 und du drehst das um 45 Grad ... was sollte der Rahmen sein?

Von docs Apple über die transformation:

Wenn diese Eigenschaft nicht die Identität Transformation ist, ist der Wert des Rahmens Eigenschaft ist nicht definiert und daher ignoriert werden sollte.

Dies erklärt, warum AutoLayout keine Aktualisierungen durchführt.

+0

danke dir richtig, ich verpasste das in der Dokumentation .. Eigentlich habe ich den Rahmen protokolliert und ich bekam das skalierte Ergebnis, so dass ich verwirrt wurde, dass Rahmen chaging aber nicht die damit verbundenen Ansichten. Kurioserweise gibt es eine Methode, die Transformation in Identität zu verwandeln und diese Differenz auf den Frame anzuwenden. – Azerue

Verwandte Themen