CAShapeLayer ralentir la rotation de l'interface
-
19-09-2019 - |
Question
Je suis en train de déplacer un code de dessin personnalisé à partir d'une vue sur un CAShapeLayer
, qui a ensuite s'ajouté comme sous-couche au CALayer
de la vue originale. Cela fonctionne aussi bien, mais lors de la rotation du dispositif, l'animation commence à bégayer, par exemple vous voyez que le cadre dans l'orientation initiale et l'orientation finale, avec au plus un cadre entre - pas lisse du tout. animations insérable et slide-out du UIViewController
correspondant sont un peu saccadé aussi (mais pas beaucoup).
Toutes les CAShapeLayer
a dans son path
est un CGPathAddRect
, il est mis à opaque
, son opacity
est 1.0f
et le fillColor
est réglé sur bleu opaque.
Lors de l'élaboration du chemin directement dans la méthode drawRect
de vue, cependant, l'animation est lisse. Donc, je suppose qu'il a quelque chose à voir avec le CAShapeLayer
étant animé pendant la rotation.
Pourriez-vous me dire comment soit se débarrasser de ces saccades ou tout simplement cacher la CAShapeLayer
lors de l'animation? Pour en revenir à tirer juste CGPath
s directement est pas une option pour moi parce que je compte sur la capacité de CAShapeLayer
pour animer son chemin (il n'est pas animé dans mes essais avec rotation de la vue).
/ mise à jour: il se produit également lorsque la vue UIViewController
s rotatif contient une vue d'une sous-classe de CAGradientLayer
comme layerClass
(par exemple, une vue d'une couche de gradient comme arrière-plan)
Vive
MrMage
La solution 2
On dirait que ce problème a été résolu par Apple dans iOS 4.
Autres conseils
Eh bien il y a une propriété de peau, vous pouvez cacher la CAShapeLayer
puis faire l'animation. Ensuite, appelez une méthode qui non cache la CAShapeLayer
afin que vous ne voyez pas pendant qu'il tourne et il doit être lisse