2016-11-09 116 views
-1

我想收縮三角形如下向下:遊樂場代碼:爲AffineTransform和AnchorPoint不工作,因爲我想

enter image description here

但三角形向上收縮如下:

enter image description here

變換代碼如下:

layer.setAffineTransform(CGAffineTransformMakeScale(1.0, 0.5)) 

我試圖使用anchorPoint,但我無法scceed。

//: Playground - noun: a place where people can play 

import UIKit 

let view = UIView(frame: CGRectMake(0, 0, 200, 150)) 

let layer = CAShapeLayer() 
let triangle = UIBezierPath() 
triangle.moveToPoint (CGPointMake(50, 150)) 
triangle.addLineToPoint(CGPointMake(100, 50)) 
triangle.addLineToPoint(CGPointMake(150, 150)) 
triangle.closePath() 
layer.path = triangle.CGPath 
layer.strokeColor = UIColor.blueColor().CGColor 
layer.lineWidth = 3.0 
view.layer.addSublayer(layer) 

view 

layer.setAffineTransform(CGAffineTransformMakeScale(1.0, 0.5)) 

view 

阿尼什給了我一個建議,但不能很好地工作:

layer.setAffineTransform(CGAffineTransformMakeScale(2.0, 0.5)) 

enter image description here

+0

layer.setAffineTransform(CGAffineTransformMakeScale(2.0,0.5)) –

回答

2

變換圍繞圖層的anchorPoint操作,默認情況下是在層的中心。因此,你收縮向內收縮,而不是向下收縮。

如果你想向下收縮,則需要縮小更改視圖的位置(或使用翻譯,除了你的尺度變換變換),或在執行變換前更改層的anchorPoint

您的代碼的另一個嚴重問題是您的圖層沒有分配的大小。這會導致您的轉換結果非常具有誤導性。

我運行了這個版本的代碼,並得到了你所要求的結果。我在我添加的關鍵字旁放了一顆星。 (注意,這是斯威夫特3,你真的需要加緊板和更新在這裏。)

let view = UIView(frame:CGRect(x: 0, y: 0, width: 200, height: 150)) 
let layer = CAShapeLayer() 
layer.frame = view.layer.bounds // * 
let triangle = UIBezierPath() 
triangle.move(to: CGPoint(x: 50, y: 150)) 
triangle.addLine(to: CGPoint(x: 100, y: 50)) 
triangle.addLine(to: CGPoint(x: 150, y: 150)) 
triangle.close() 
layer.path = triangle.cgPath 
layer.strokeColor = UIColor.blue.cgColor 
layer.lineWidth = 3 
view.layer.addSublayer(layer) 
view 
layer.anchorPoint = CGPoint(x: 0.5, y: 0) // * 
layer.setAffineTransform(CGAffineTransform(scaleX: 1, y: 0.5)) 
view 

前:

enter image description here

後:

enter image description here

+0

非常感謝! – weed