2 Stimmen

Wie kann ich die aktuelle Transformation des PresentationLayers korrekt ermitteln?

Ich habe das ausprobiert:

CATransform3D rotationTransform = [[self.layer presentationLayer] transform];

Dies wird nicht funktionieren, da der Compiler eine Warnung und einen Fehler ausgibt:

Warnung: Mehrere Methoden "-transform" gefunden. Fehler: Ungültiger Initialisierer.

Dann habe ich das ausprobiert:

CATransform3D rotationTransform = [[self.layer presentationLayer] valueForKey:@"transform"];

Fehler: Ungültiger Initialisierer.

Was ist daran falsch?

6voto

Rob Napier Punkte 265102

-presentationLayer gibt eine id . Sie müssen es an einen CALayer zurückgeben:

CATransform3D rotationTransform = [(CALayer*)[self.layer presentationLayer] transform];

Um ganz sicher zu gehen, sollten Sie sich vorher informieren:

CATransform3D rotationTransform = {0};
CALayer* presentationLayer = (CALayer*)[self.layer presentationLayer];
if( [presentationLayer respondsToSelector:@selector(transform)]) {
    rotationTransform = presentationLayer.transform;
}

In der Praxis wird dies jedoch auch ohne diese Prüfung möglich sein.

Im zweiten Fall, -valueForKey: gibt auch eine id die Sie versuchen, struct zuzuweisen, was implizit nicht möglich ist. Sie können nicht einfach einen Objektzeiger in eine Struktur umwandeln.

0 Stimmen

Das habe ich auch in der ursprünglichen Antwort, die diese Frage ausgelöst hat, korrigiert: stackoverflow.com/questions/877198/ . Er hätte noch ein wenig warten können, und ich hätte meine Antwort geändert, anstatt eine völlig neue Frage zu stellen. Es könnte jedoch nützlich sein, dies als eigenständigen Beitrag für Leute aufzubewahren, die etwas Ähnliches googeln.

0 Stimmen

Nur um das hinzuzufügen... Ich hatte mit dieser Sache zu kämpfen: Jede Transformation muss von dem Punkt aus erfolgen, auf den sie in der letzten Position gesetzt wurde. So, dass eine Ansicht, die auf 15 Grad gedreht wird, von 15 Grad auf jeden anderen Winkel gedreht werden sollte. d.h. die Einstellung des von-Wertes ist sehr notwendig, sonst werden Sie eine Transformation mit Glitch sehen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X