首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setNeedsDisplay()没有调用draw(_ rect: CGRect)

setNeedsDisplay()没有调用draw(_ rect: CGRect)
EN

Stack Overflow用户
提问于 2019-08-13 08:19:19
回答 2查看 1K关注 0票数 0

我在这个网站上发现了类似的问题,但都没有解决我的问题。请仔细阅读整个代码。当我想在setNeedsDisplay()上画一条线时,draw(_ rect: CGRect)函数不会调用MyView。

我在故事板中创建了一个名为“"MyViewController”的子视图“的视图"myView”,并为视图控制器创建了一个IBOutlet

然后,我创建了一个名为"MyViewClass“的类,并将其设置为故事板中的"myView”类。

我将bool值drawLine设置为true并调用函数updateLine(),问题是setNeedsDispaly()没有触发draw(_ rect: CGRect)函数。

代码语言:javascript
复制
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()
    }
}

我对斯威夫特很陌生。任何帮助都会感激的。谢谢。

EN

Stack Overflow用户

发布于 2019-08-13 08:50:57

MyView类

代码语言:javascript
复制
class myView : UIView {
    var updateView : Bool = false {
        didSet {
            setNeedsDisplay()
        }
    }

    override func draw(_ rect: CGRect) {
        print("in Draw")

    }

}

MyViewController

代码语言:javascript
复制
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,因此它是可见的。

希望这能帮到你。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57473759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档