2016-06-04 3 views
0

Ниже приведен образ, для которого код не выравнивает центр UIView, белого цвета.Центр Выровнять слой CAShape в 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

ответ

4

anchorPoint не для установки положения CAShapeLayer, используйте position вместо этого.

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) 

Редактировать

Извините за такой грубый ответ прежде, приведенный выше код может не работать, как вы хотите, вот правильный ответ, который я только что вышел. Важно отметить,: Как нарисовать овал путь сделал силу по позиции вашего CAShapeLayer

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 

яблочной документы,

Овальная дорожка создается в направлении по часовой стрелке (по отношению по умолчанию системы координат)

в другом слове, овал путь рисуется от края вместо центра, так что вы должны принять в для соединения радиуса овала, который вы рисуете. В вашем случае, вам нужно сделать, это:

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

Теперь мы гарантируем, что центр нарисованной траектории равен центру CAShapeLayer. Затем мы можем использовать свойство position для перемещения CAShapeLayer, как мы хотим. Изображение, приведенное ниже, может помочь вам понять.

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];