2016-11-09 3 views
-1

Я хочу, чтобы уменьшить треугольник вниз, как показано ниже:площадка код: AffineTransform и AnchorPoint не работают, как я хочу

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 

Аниш дал мне совет, но не работает:

layer.setAffineTransform(CGAffineTransformMakeScale(2.0, 0.5)) 

enter image description here

+0

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

ответ

2

Трансформации работают вокруг слоя anchorPoint, который по умолчанию находится в центре слоя. Таким образом, вы сокращаетесь, рушившись внутрь, а не сворачиваясь вниз.

Если вы хотите, чтобы уменьшить вниз, вам нужно будет уменьшать и изменить положение изображения (или использовать перевод преобразования в дополнение к шкале преобразования), или изменение слоя anchorPoint перед выполнением преобразования.

Еще одна серьезная проблема с вашим кодом заключается в том, что ваш слой не имеет назначенного размера. Это приводит к тому, что результаты вашего преобразования очень вводят в заблуждение.

Я запустил эту версию вашего кода и получил именно те результаты, о которых вы просите. Я добавил звездочку рядом с ключевыми строками, которые я добавил. (Обратите внимание, что это Swift 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