我在这个网站上发现了类似的问题,但都没有解决我的问题。请仔细阅读整个代码。当我想在setNeedsDisplay()上画一条线时,draw(_ rect: CGRect)函数不会调用MyView。
我在故事板中创建了一个名为“"MyViewController”的子视图“的视图"myView”,并为视图控制器创建了一个IBOutlet。
然后,我创建了一个名为"MyViewClass“的类,并将其设置为故事板中的"myView”类。
我将bool值drawLine设置为true并调用函数updateLine(),问题是setNeedsDispaly()没有触发draw(_ rect: CGRect)函数。
import UIKit
class MyViewClass : UIView{
var drawLine = Bool() // decides whether to draw the line
func updateLine(){
setNeedsDisplay()
}
override func draw(_ rect: CGRect) {
if drawLine == true{
guard let context = UIGraphicsGetCurrentContext() else{
return
}
context.setLineWidth(4.0)
context.setStrokeColor(UIColor.red.cgColor)
context.move(to: CGPoint(x: 415 , y: 650))
context.addLine(to: CGPoint(x:415 , y: 550))
context.strokePath()
}
}
}
class myViewController:UIViewController {
@IBOutlet weak var insideView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let myViewInstance = MyViewClass()
myViewInstance.drawLine = true
myViewInstance.updateLine()
}
}我对斯威夫特很陌生。任何帮助都会感激的。谢谢。
发布于 2019-08-13 08:50:57
MyView类
class myView : UIView {
var updateView : Bool = false {
didSet {
setNeedsDisplay()
}
}
override func draw(_ rect: CGRect) {
print("in Draw")
}
}MyViewController
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let view = myView()
view.updateView = true
}
}在故事板中,我将视图类设置为myView,因此它是可见的。


希望这能帮到你。
https://stackoverflow.com/questions/57473759
复制相似问题