Я использую приведенный ниже код для изгиба края пользовательского представления.
/// Curves `self's` trailing edge.
override func draw(_ rect: CGRect) {
super.draw(rect)
let path=UIBezierPath(ovalIn: .init( // The path defining `self's` curved edge.
x: rect.width - Self.ovalWidth, // Align the oval's trailing edge with `self's`.
y: (rect.height - Self.ovalHeight) / 2, // Center oval vertically within `self`.
width: Self.ovalWidth,
height: Self.ovalHeight
))
path.stroke() // Draws the border of the curved edge.
self.layer.mask={ $0.path=path.cgPath; return $0 }(CAShapeLayer())
}
Меня беспокоит то, что, насколько я вижу, нет гарантии, что rect
будет равно self.frame
; что приведет к неопределенному поведению в том, что касается рисования маски. Возможно ли, что если я использую self.frame
вместо rect
, то draw(_:)
может быть вызван, пока self.frame
еще не установлен, или имеет значение, которое не является актуальным? - это представление выложено с помощью AutoLayout.