Я добавил подвид (с черной рамкой) в вид и отцентрировал его.
Затем я создаю 2 одинаковых треугольника с помощью CAShapeLayer и добавляю один в подвид, а другой в основной вид.
Вот визуальный результат в Playground, где мы видим, что зеленый треугольник полностью смещен и должен быть в центре.
А вот код:
let view = UIView()
let borderedView = UIView()
var containedFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
func setupUI() {
view.frame = CGRect(x: 0, y: 0, width: 300, height: 600)
view.backgroundColor = .white
borderedView.frame = containedFrame
borderedView.center = view.center
borderedView.backgroundColor = .clear
borderedView.layer.borderColor = UIColor.black.cgColor
borderedView.layer.borderWidth = 1
view.addSubview(borderedView)
setupTriangles()
}
private func setupTriangles() {
view.layer.addSublayer(createTriangle(color: .red)) // RED triangle
borderedView.layer.addSublayer(createTriangle(color: .green)) // GREEN triangle
}
private func createTriangle(color: UIColor) -> CAShapeLayer {
let layer = CAShapeLayer()
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: -containedFrame.width, y: 0))
bezierPath.addLine(to: CGPoint(x: 0, y: -containedFrame.height))
bezierPath.close()
layer.position = borderedView.center
layer.path = bezierPath.cgPath
layer.fillColor = color.cgColor
return layer
}
Примечание: Все position
(вида, borderedView и оба треугольника) одинаковы (150.0, 300.0)
Вопрос: Почему зеленый слой находится не в том положении?
Молодец, что нашел "дымящийся пистолет", вызвавший конкретное поведение. (проголосовал.) Я не внимательно смотрел на код ОП.
Спасибо @DuncanC. Мне весело работать над визуальными проблемами, когда ОП предоставляет свой код.
Итак, вы копировали/вставляли код в проект или игровую площадку и отлаживали его, или вы просматривали код вручную?
@DuncanC, я просмотрел код вручную и определил проблемную строку. Я не идентифицировал проблему, распечатывая значения или выполняя код. Затем я поместил код в проект и разработал исправление. Конечно, помогло то, что я уже сталкивался с подобными проблемами.