为什么当我扩展它时,CAShapeLayer不会以我的UIView为中心?

时间:2016-12-15 20:44:55

标签: ios swift cashapelayer

 let centerPointX = colorSizeGuide.bounds.midX / 2
    let centerPointY = colorSizeGuide.bounds.midY / 2
    let circleWidth: CGFloat = 10
    let circleHeight: CGFloat = 10

    shape.path = UIBezierPath(ovalIn: CGRect(x: centerPointX + circleWidth / 4, y: centerPointY + circleHeight / 4, width: circleWidth, height: circleHeight)).cgPath
    shape.strokeColor = UIColor(r: 160, g: 150, b: 180).cgColor
    shape.fillColor = UIColor(r: 160, g: 150, b: 180).cgColor
    shape.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    shape.lineWidth = 0.1
    shape.transform = CATransform3DMakeScale(4.0, 4.0, 1.0)
    colorSizeGuide.layer.addSublayer(shape)

这里发生了什么。我需要CAShapeLayer留在小灰色区域的中间:

enter image description here

1 个答案:

答案 0 :(得分:2)

我对仿射的挣扎变形了一点我自己,但这就是我的想法:

比例集中在0,0左右,因此它将从那一点开始增长。这意味着它将从原点“推开”。

为了从中心生长,您应该将原点移动到形状的中心点,缩放,然后将原点移回现在缩放的数量:

var transform = CATransform3DMakeTranslation(centerPointX, centerPointY, 0)
transform = CATransformScale(transform, 4.0, 4.0, 1.0)
var transform = CATransform3DTranslate(
    transform,
    -4.0 * centerPointX, 
    -4.0 * centerPointY, 
    0)
shape.transform = transform
顺便说一句,我无法理解您在问题中发布的图像。你说“我需要CAShapeLayer留在小灰色区域的中间”我收集你的形状图层是其中一个圆圈,但不清楚你的意思是“小灰色区域”。看起来可能会出现以某种方式裁剪的轮廓。