Это сообщение: неверный контекст 0x0 в пользовательском UIView ... должен был дать мне ключ для решения моей проблемы, но я не смог избежать ошибки неверного контекста.Некоторое разъяснение будет высоко ценится.
Я хочу рисовать линии в подпредставлении, представленном при загрузке ViewController.Для этого я создаю подкласс для UIView, который похож на SplitCircleView, размещенный StartPlayer.
Чтобы запустить код, создайте новый проект и замените содержимое файла ViewController на:
import UIKit
@IBDesignable
class ViewController: UIViewController {
let mySubViewInstance = SplitCircleView()
override func viewDidLoad() {
super.viewDidLoad()
//let mySubViewInstance = SplitCircleView()
mySubViewInstance.setNeedsDisplay(mySubViewInstance.frame)
}
}
class SplitCircleView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
//self.setNeedsDisplay()
//draw(frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//self.setNeedsDisplay()
//draw(frame)
}
override func setNeedsDisplay(_ rect: CGRect) {
self.backgroundColor = .clear
drawSlice(rect: rect, startPercent: 87.5, endPercent: 37.5, color: .green)
drawSlice(rect: rect, startPercent: 37.5, endPercent: 87.5, color: .red)
}
func drawSlice(rect: CGRect, startPercent: CGFloat, endPercent: CGFloat, color: UIColor) {
let center = CGPoint(x: rect.origin.x + rect.width / 2, y: rect.origin.y + rect.height / 2)
let radius = (min(rect.width, rect.height) / 2)
let startAngle = startPercent / 100 * .pi * 2 - .pi
let endAngle = endPercent / 100 * .pi * 2 - .pi
let path = UIBezierPath()
path.move(to: center)
path.addArc(withCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
path.close()
color.setFill()
path.fill()
}
}
Как избежать ошибки недопустимого контекста и нарисовать что-то в подпредставлении, когдаViewController загружается?