CALayer autoresizing auf dem iPhone/iPad: Wie?
Ich bin versuchen, um eine UIView-Unterklasse ("GradientView") , wird sich füllen mit einem Farbverlauf in verschiedenen Farben. Ich habe es umgesetzt, indem ein CAGradientLayer als eine sub-Schicht von UIView ist Schicht.
Es sah gut aus, aber wenn der Bildschirm gedreht wurde, hat es nicht die Größe der verlaufsebene. Ohne Glück bei der Suche eine BOOL-Eigenschaft auf die Ebene zu wechseln, ich überschrieb layoutSubviews in der GradientView.
-(void)layoutSubviews {
self.gradientLayer.frame = self.bounds;
}
Dieser funktioniert, aber das Zeug hinter die GradientView ist noch sichtbar, während das Gerät die rotation animation. Was ist der einfachste Weg, um 'autoresize' , CAGradientLayer, entsprechend seiner übergeordneten Ebene Grenzen, so dass die animation ist glatt (wie bei UIView autoresizing)?
InformationsquelleAutor der Frage Moduspwnens | 2010-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie wahrscheinlich Weg mit der Festlegung der +layerClass Methode, die auf einem benutzerdefinierten UIView...
Können Sie initialisieren der layer im controller viewDidLoad() (oder wo auch immer), so etwas wie...
InformationsquelleAutor der Antwort l8nite
Ich würde:
Erhöhen die Größe Ihrer Ansicht nach die maximale von jeder dimension in der willRotateToInterfaceOrientation code. (Zum Beispiel für eine 320x480 iPhone - setzen Sie die DIMMs auf 480x480).
Legen Sie die Grenzen in übereinstimmung mit dem neu gedrehten Ansicht, in der didRotateFromInterfaceOrientation Funktion.
Dieser sollte es so machen, dass der Blickwinkel groß genug, so dass unabhängig davon, wie es orientiert ist, während der animation, es wird der ganze Bildschirm bedeckt ist. Es wird nicht "glatt" - da der gradient muss gedreht werden, aber zumindest werden Sie nicht sehen, hinter der Ebene, in der Mitte der rotation.
InformationsquelleAutor der Antwort Brad
InformationsquelleAutor der Antwort Luke Mcneice
Beachten Sie, dass die Rücksendung CAGradientLayer als layer-Klasse funktioniert nur, wenn Sie die Ansicht Hintergrundfarbe auf "transparent". Sie müssen die Ebene hintergrund-Farbe, wenn Sie müssen eine andere Farbe als transparent.
InformationsquelleAutor der Antwort user1172004
in meinem Fall dieser Arbeit:
InformationsquelleAutor der Antwort onmir