2016-11-09 106 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