【发布时间】:2019-08-13 08:19:19
【问题描述】:
我在这个网站上发现了类似的问题,但没有一个能解决我的问题。请仔细阅读整个代码。当我想在 MyView 上画一条线时,setNeedsDisplay() 函数没有调用 draw(_ rect: CGRect)。
我在情节提要中创建了一个名为“myView”的视图作为“MyViewController”的子视图,并为视图控制器创建了一个IBOutlet。
然后我创建了一个名为“MyViewClass”的类,并将其设置为情节提要中的“myView”类。
我将布尔值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()
}
}
我对 Swift 还很陌生。任何帮助将不胜感激。谢谢。
【问题讨论】:
-
请看看这个answer。我自己试过了,感觉如果视图不可见,它就不会调用drawRect。只需确认您计划更新的视图在将 drawLine 设置为 true 时可见。
-
视图永远不会添加到您的视图层次结构中,因此它永远不会被绘制。
-
你能告诉我如何将它添加到视图层次结构中,我只是将视图添加到主视图吗?因为我已经这样做了。