Zeichnen Sie eine Linie mit einem CALayer

Ich versuche zu zeichnen eine Linie zwischen zwei Punkten mit einem CALayer. Hier ist mein 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);
}

Ich weiß, dass die Länge wird korrekt berechnet, und ich bin ziemlich sicher, dass der center auch. Wenn ich es laufen Linien angezeigt, die richtige Länge und den pass durch den Mittelpunkt zwischen den beiden Punkten, aber sind nicht richtig gedreht. Zuerst dachte ich, dass die Linie wurde gedreht um den falschen Ankerpunkt, so habe ich getan: layer.anchorPoint = center;, aber dieser code nicht zeigen, irgendwelche Linien auf dem Bildschirm. Was mache ich falsch

Der Ankerpunkt ist in der Einheit Koordinatenraum (x-und y geht von 0 bis 1). Dies bedeutet, dass ein Ankerpunkt zentriert ist (0.5, 0.5), unabhängig von der Größe und dem Seitenverhältnis der Ebene.
Ok, damit layer.anchorPoint = center; setzt den Ankerpunkt an eine etwas weiter Weg, und die rotation wäre irgendwo weit jenseits der Bindungen der Bildschirm...macht Sinn, dass es nicht angezeigt wird. Haben Sie eine Idee, was das problem sein könnte?

InformationsquelleAutor 67cherries | 2014-02-02

Schreibe einen Kommentar