游乐场代码:AffineTransform和AnchorPoint不能按我的意愿工作

时间:2016-11-09 01:06:09

标签: ios swift cgaffinetransform swift-playground

我想缩小三角形,如下所示:

enter image description here

但三角形向上收缩如下:

enter image description here

转换代码如下:

layer.setAffineTransform(CGAffineTransformMakeScale(1.0, 0.5))

我尝试使用anchorPoint,但我无法成功。

//: 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

Anish给了我一个建议,但效果不好:

layer.setAffineTransform(CGAffineTransformMakeScale(2.0, 0.5))

enter image description here

1 个答案:

答案 0 :(得分:2)

变换围绕图层ManipulationCompleted运行,默认情况下,图层位于图层的中心。因此,您可以通过向内折叠而不是向下折叠来缩小。

如果你想向下缩小,你需要缩小来改变视图的位置(或者除了缩放变换之外还使用平移变换),或者更改图层和#39; s Grid在执行转换之前。

您的代码的另一个严重问题是您的图层没有指定的大小。这会导致转换结果非常误导。

我运行了此版本的代码,并获得了您要求的结果。我在我添加的关键线旁边放了一颗星。 (请注意,这是Swift 3;你真的需要升级到这里并在这里更新。)

anchorPoint

在:

enter image description here

后:

enter image description here