中心在UIView中对齐CAShape图层

时间:2016-06-04 01:04:55

标签: ios cashapelayer

以下是代码未对齐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

3 个答案:

答案 0 :(得分:9)

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

来自Apple Document,

  

椭圆形路径以顺时针方向创建(相对于默认路径)   坐标系)

换句话说,椭圆形路径是从边缘而不是中心绘制的,因此您必须考虑正在绘制的椭圆的半径。在您的情况下,您需要这样做:

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

现在我们确保绘制路径的中心等于CAShapeLayer的中心。然后我们可以使用position属性来移动CAShapeLayer。下面的图片可以帮助您理解。

enter image description here enter image description here

答案 1 :(得分: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];

答案 2 :(得分:0)

对于那些仍存在居中问题的人,这种方法对我有用:

1-将形状图层框架设置为与父视图框架相同。

shapeLayer.frame = view.frame

2-删除形状层位置属性。

// shapeLayer.position = CGPoint(x: ,y: )

3-将贝塞尔曲线的x和y值设置为零。

UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: self.width, height: 
self.height))

仅这些就足够了,摆脱其余部分。