Нет смысла устанавливать гравитацию содержимого CAShapeLayer, поскольку это никоим образом не повлияет на способ рисования фигуры.Гравитация содержимого имеет смысл только для слоя с содержимым , например, CGImage, который обращается к его свойству contents
.
Вот пример, где contentsGravity
имеет значение;то же изображение, тот же размер слоя, разное содержание гравитация:
![enter image description here](https://i.stack.imgur.com/cTYKD.png)
override func viewDidLoad() {
super.viewDidLoad()
do {
let layer = CALayer()
layer.frame = CGRect(x: 100, y: 100, width: 250, height: 200)
layer.contents = UIImage(named:"smiley")!.cgImage
layer.borderWidth = 1
self.view.layer.addSublayer(layer)
layer.contentsGravity = .center
}
do {
let layer = CALayer()
layer.frame = CGRect(x: 100, y: 300, width: 250, height: 200)
layer.contents = UIImage(named:"smiley")!.cgImage
layer.borderWidth = 1
self.view.layer.addSublayer(layer)
layer.contentsGravity = .resize
}
}
Но если мы попробуем то же самое со слоем формы, содержимоесила тяжести не имеет значения:
![enter image description here](https://i.stack.imgur.com/44fkk.png)
override func viewDidLoad() {
super.viewDidLoad()
do {
let layer = CAShapeLayer()
layer.frame = CGRect(x: 100, y: 100, width: 250, height: 200)
layer.path = CGPath(rect: CGRect(x: 0, y: 0, width: 20, height: 20), transform: nil)
layer.borderWidth = 1
self.view.layer.addSublayer(layer)
layer.contentsGravity = .center
}
do {
let layer = CAShapeLayer()
layer.frame = CGRect(x: 100, y: 300, width: 250, height: 200)
layer.path = CGPath(rect: CGRect(x: 0, y: 0, width: 20, height: 20), transform: nil)
layer.borderWidth = 1
self.view.layer.addSublayer(layer)
layer.contentsGravity = .resize
}
}