2016-06-04 11 views
0

Das folgende ist ein Bild, für das der Code nicht die Mitte der UIView, weiße Farbe ausrichtet.Center Align CAShape Schicht in einer UIView

CAShapeLayer *layer = [CAShapeLayer layer]; 
layer.anchorPoint=CGPointMake(0.5, 0.5); 

layer.path=[UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 75.0, 75.0)].CGPath; 
layer.fillColor =[UIColor redColor].CGColor; 

[self.shapeView.layer addSublayer:layer]; 

enter image description here

Antwort

4

anchorPoint ist nicht die Position der CAShapeLayer zur Einstellung verwenden position statt.

let layer = CAShapeLayer() 
layer.borderColor = UIColor.blackColor().CGColor 
layer.borderWidth = 100 

layer.bounds = CGRectMake(0, 0, 50, 50) 
layer.position = myView.center 
layer.fillColor = UIColor.redColor().CGColor 
view.layer.addSublayer(layer) 

bearbeiten

Sorry für eine solche grobe Antwort vor, vor der Code kann nicht arbeiten, wie Sie wollen, hier ist die richtige Antwort, die ich kommen gerade. Eine wichtige Sache zu beachten ist: Wie Sie die ovale Bahn Effekt

let layer = CAShapeLayer() 
myView.layer.addSublayer(layer) 
layer.fillColor = UIColor.redColor().CGColor 
layer.anchorPoint = CGPointMake(0.5, 0.5) 
layer.position = CGPointMake(myView.layer.bounds.midX, myView.layer.bounds.midY) 
layer.path = UIBezierPath(ovalInRect: CGRectMake(-75.0/2, -75.0/2, 75.0, 75.0)).CGPath 

von Apple Dokument,

Die ovale Bahn im Uhrzeigersinn erzeugt wird (relativ die Position Ihrer CAShapeLayer taten ziehen auf den Standardwert ist Koordinatensystem)

in anderen Worten, die ovale Bahn von der Kante anstelle der Mitte gezogen, so dass man in nehmen muß um den Radius des zu zeichnenden Ovals anzugeben. In Ihrem Fall müssen Sie dies tun:

layer.path = UIBezierPath(ovalInRect: CGRectMake(-75.0/2, -75.0/2, 75.0, 75.0)).CGPath 

Jetzt stellen wir sicher, dass das Zentrum des gezogenen Weg zum Zentrum von CAShapeLayer gleich ist. Dann können wir position Eigenschaft verwenden, um die CAShapeLayer zu verschieben, wie wir wollen. Das Bild unten könnte Ihnen helfen zu verstehen.

enter image description hereenter image description here

0
CAShapeLayer *layer = [CAShapeLayer layer]; 
layer.anchorPoint=CGPointMake(0.5, 0.5); 

layer.path=[UIBezierPath bezierPathWithOvalInRect:CGRectMake((self.shapeView.frame.size.width/2)-37.5, (self.shapeView.frame.size.height/2)-37.5, 75.0, 75.0)].CGPath; 
//37.5 means width & height divided by 2 
layer.fillColor =[UIColor redColor].CGColor; 

[self.shapeView.layer addSublayer:layer]; 
Verwandte Themen