Tracez une ligne avec un CALayer

Je suis en train de dessiner une ligne entre deux points à l'aide d'un CALayer. Voici mon code:

//positions a CALayer to be a line between a parent node and its subnodes.

-(void)makeLineLayer:(CALayer *)layer lineFromPointA:(CGPoint)pointA toPointB:(CGPoint)pointB{
    NSLog([NSString stringWithFormat:@"Coordinates: \n Ax: %f Ay: %f Bx: %f By: %f", pointA.x,pointA.y,pointB.x,pointB.y]);

    //find the length of the line:
    CGFloat length = sqrt((pointA.x - pointB.x) * (pointA.x - pointB.x) + (pointA.y -     pointB.y) * (pointA.y - pointB.y));
    layer.frame = CGRectMake(0, 0, 1, length);

    //calculate and set the layer's center:
    CGPoint center = CGPointMake((pointA.x+pointB.x)/2, (pointA.y+pointB.y)/2);
    layer.position = center;

    //calculate the angle of the line and set the layer's transform to match it.
    CGFloat angle = atan2f(pointB.y - pointA.y, pointB.x - pointA.x);
    layer.transform = CATransform3DMakeRotation(angle, 0, 0, 1);
}

Je sais que la longueur est calculée correctement, et je suis assez sûr que le centre est également. Lorsque je l'exécute les lignes sont affichées qui sont de la bonne longueur et qui passent par le point central entre les deux points, mais ne sont pas tourné correctement. Au début, je pensais que la ligne était en train de tourner autour du faux point d'ancrage, de sorte que j'ai fait: layer.anchorPoint = center;, mais ce code ne peut pas montrer toutes les lignes sur l'écran. Ce que je fais mal

Le point d'ancrage est dans l'unité de l'espace de coordonnées (x et y passe de 0 à 1). Cela signifie qu'un centré point d'ancrage de l'est (0.5, 0.5), peu importe la taille et le ratio d'aspect de la couche.
Ok, donc faire layer.anchorPoint = center; est la mise au point d'ancrage à quelque chose, et la rotation serait quelque part au-delà des obligations de l'écran...est logique qu'elle ne s'affiche pas. Avez-vous une idée de ce que peut être le problème?

OriginalL'auteur 67cherries | 2014-02-02