Configurando el marco correcto de un CAShapeLayer recién creado
En breve
Apple NO establece laframe
obounds
paraCAShapeLayer
automáticamente (y Apple NO HA implementado un equivalente de[UIView sizeThatFits]
) Si configura el marco utilizando el tamaño del cuadro delimitador de la ruta ... todo sale mal. No importa cómo intentes configurarlo, arruina el camino Entonces, ¿cuál es la forma correcta de establecer mediante programación el marco de un @ recién creaCAShapeLayer
con un @ agregado recientemenCGPath
? Los documentos de Apple no dicen nada al respecto.
Cosas que he probado, que no funcionan:
Crear unCAShapeLayer
Crear unCGPath
, agréguelo a la capaCompruebe el @ de la caframe
- es{{0,0},{0,0}}
Set:layer.frame = CGPathGetBoundingBox( layer.path )
Frame ahora es correcto, pero la ruta ahora es DOBLE desplazamiento - cambiando laframe
hace que el camino se desplace efectivamente un @ ext(x,y)
píxeles
Set:layer.bounds = CGPathGetBoundingBox( layer.path )
layer.position = CGPathGetBoundingBox( layer.path ).origin
...no dados; todavía loco.Una cosa que intenté fue que funcionó, pero causa problemas en otros lugares:
EDIT: esto se rompe tan pronto como giras automáticamente la pantalla. Mi suposición: la rotación automática de Apple requiere control de la propiedad "transform".
Crear unCAShapeLayer
Crear unCGPath
, agréguelo a la capaCompruebe el marco de la capa: es{{0,0},{0,0}}
Set:layer.frame = CGPathGetBoundingBox( layer.path )
Set:layer.transform = CGAffineTransformMakeTranslation( CGPathGetBoundingBox( layer.path ).origin.x * -1, // same for y-coord: set it to "-1 * the path's origin
Esto funciona, pero ... un montón de código de terceros supone que la transformación inicial para unCALayer
es Identidad.
No debería ser tan difícil! ¿Seguramente hay algo que estoy haciendo mal aquí?
(He tenido una sugerencia: "cada vez que agregue una ruta, ejecute manualmente una función personalizada para cambiar todos los puntos por-1 * (top-left-point.x, top-left-point.y)
". De nuevo, eso funciona, pero es ridículamente complejo)