Cadre et limites de CAShapeLayer
Je suis en train de travailler sur CAShapeLayer
.Et de tenter de tirer des non-linéaire.Je tiens à mettre en image à CAShapeLayer
.Donc je peux l'utiliser CGPathGetPathBoundingBox
méthode pour obtenir de l'image à partir de CGPathRef
.
Voici le code :
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100, (0), (M_PI_2), NO);
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100-50, (M_PI_2), (0), YES);
CGPathCloseSubpath(path);
CAShapeLayer* arcLayer = [[CAShapeLayer alloc]init];
arcLayer.path = path;
arcLayer.frame = CGPathGetPathBoundingBox(path);
arcLayer.bounds = CGPathGetPathBoundingBox(path);
[self.layer addSublayer:arcLayer]; `
Veuillez consulter mon code avec soin .J'ai mis la même image et les limites de CAShapeLayer.Mon problème est que si je suis de ne pas fixer de limites (comme image) ,puis il l'habitude de montrer le contenu de mon ou il l'habitude de montrer mon contenu à l'intérieur du cadre.Pourquoi?S'il vous plaît aider moi.En vous remerciant.
source d'informationauteur h999
Vous devez vous connecter pour publier un commentaire.
Lorsque vous modifiez la
frame
d'unCALayer
vous êtes en train de modifier sa taille et sa position dans l'espace de coordonnées de ses superlayer.frame
est une valeur calculée, en fonction de l'objet dubounds
etposition
. Dans ce cas, la couche n'est pas encore un superlayer donc son espace de coordonnées est sans dimension. Lorsque vous définissez laframe
la taille devient lebounds
bien, mais depuis tout point sans dimension de l'espace est égale à zéro, la position restera à zéro au lieu de ce que tu avais prévu.Pour résoudre ce problème, vous pouvez définir la
bounds
pour définir la couche de la taille, etposition
(ce qui est un réel non-propriété calculée) dans l'espace de coordonnées de la superlayer avant de l'ajouter en tant que sous-couche.Ce qui suit est une citation de la
CALayer
documentation:Il ressemble à la CAShapeLayer lors de la configuration de la
frame
par lui-même, il n'a pas conserver les valeurs d'origine de l'CGRect, seule la taille. Lorsque vous définissez labounds
l'origine est conservée et donc affiche dans l'emplacement approprié. Vous devez également définir la valeur de la position du point central de l'endroit où vous voulez vous en forme pour être affiché:Dans mon expérience, la définition de la
position
d'unCAShapeLayer
est tout à fait suffisant pour qu'il s'affiche là où vous le souhaitez. Réglage de labounds
n'est pas nécessaire pour cela.Voir le CoreAnimationText exemple de code pour l'utiliser de cette façon.
Vous devez définir
bounds
ou bien il va se comporter comme leanchorPoint
est fixé à[0, 0]
. Qui en veut? 😀