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留在小灰色区域的中间:
答案 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留在小灰色区域的中间”我收集你的形状图层是其中一个圆圈,但不清楚你的意思是“小灰色区域”。看起来可能会出现以某种方式裁剪的轮廓。