2016-12-15 54 views
0
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留在灰色的小區域的中間:爲什麼CAShapeLayer在縮放時不能集中到我的UIView?

enter image description here

回答

1

我仿射奮鬥變換一點我自己,但這裏是我想是怎麼回事:

規模發生以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 

BTW,我無法理解您的問題發佈的圖像。你說:「我需要CAShapeLayer留在小灰區的中間」我收集你的形狀圖層是其中一個圓圈,但不清楚你的意思是「小灰色區域」。看起來可能有一個輪廓被剪斷了。