Configurar o quadro correto de um CAShapeLayer recém-criado

Em resumo

Apple NÃO define oframe oubounds paraCAShapeLayer automaticamente (e a Apple NÃO implementou um equivalente a[UIView sizeThatFits]) Se você definir o quadro usando o tamanho da caixa delimitadora do caminho ... tudo dará errado. Não importa como você tente configurá-lo, ele estraga o caminho

Então, qual é a maneira correta de definir programaticamente o quadro de umCAShapeLayer com um @ adicionado recentemenCGPath? Os documentos da Apple são omisso

Coisas que eu tentei, que não funcionam:

Criar umaCAShapeLayerCriar umaCGPath, adicione-o à camadaVerifique a camadaframe - Está{{0,0},{0,0}}Set:layer.frame = CGPathGetBoundingBox( layer.path )

@Frame agora está correto, mas o caminho agora está em DOUBLE offset - alterando oframe faz com que o caminho seja efetivamente deslocado um @ ext(x,y) píxei

Set:layer.bounds = CGPathGetBoundingBox( layer.path )

... tudo fica louco. Nada faz mais sentidoTente corrigi-lo fazendolayer.position = CGPathGetBoundingBox( layer.path ).origin ... sem dados; ainda nozes.

Uma coisa que tentei fazer isso funcionou, mas causa problemas em outros lugares:

EDIT: isso QUEBRA assim que você gira automaticamente a tela. Meu palpite: a rotação automática da Apple requer controle da propriedade "transformar"

Criar umaCAShapeLayerCriar umaCGPath, adicione-o à camadaVerifique o quadro da camada - é{{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

Isso funciona, mas ... muitos códigos de terceiros assumem que a transformação inicial de umCALayer é identidade.

Não deve ser tão difícil! Certamente há algo que estou fazendo errado aqui?

(Tive uma sugestão: "toda vez que você adicionar um caminho, execute manualmente uma função personalizada para alterar todos os pontos por-1 * (top-left-point.x, top-left-point.y) ". Novamente, isso funciona - mas é ridiculamente complexo)

questionAnswers(1)

yourAnswerToTheQuestion