Cocoa 需要显示触发无限drawRect循环

Cocoa 需要显示触发无限drawRect循环,cocoa,events,swift,nsview,Cocoa,Events,Swift,Nsview,在这个处理程序中设置needsDisplay似乎触发了一个无休止的绘图级联,我不知道为什么 理想的效果是,一旦mouseUp更改按钮的模式属性,当发生drawRect时,按钮的图标将仅从更改为,而不更改上面gif中显示的层叠图形 我把它缩小了一点,可以说原因是逐渐变大了,宽度变小了,但我不明白为什么会这样。事实证明这是因为我给子视图分配了新帧,试图正确计算大小。。。这触发了draw循环,因为我正在计算并在drawRect中分配它们 事实证明,有一个覆盖专门处理视图大小调整事件 更改相关代码,

在这个处理程序中设置
needsDisplay
似乎触发了一个无休止的绘图级联,我不知道为什么

理想的效果是,一旦
mouseUp
更改按钮的
模式
属性,当发生
drawRect
时,按钮的图标将仅从更改为,而不更改上面gif中显示的层叠图形


我把它缩小了一点,可以说原因是逐渐变大了,宽度变小了,但我不明白为什么会这样。

事实证明这是因为我给子视图分配了新帧,试图正确计算大小。。。这触发了draw循环,因为我正在计算并在
drawRect
中分配它们

事实证明,有一个覆盖专门处理视图大小调整事件

更改相关代码,如

override func drawRect(rect: NSRect) {
    super.drawRect(rect)
    NSColor(calibratedWhite: 0.1, alpha: 1).setFill()
    NSRectFill(rect)

    let mbFrame = NSMakeRect(
        rect.size.width / 2 - (45 / 2),
        8,
        49,
        49
    )
    mainBtn.frame = mbFrame
}


让一切看起来都很好。

我猜你在draw方法中做了一些事情,触发视图被重新显示,或者你启动了一个计时器。@GradyPlayer是的,可能是因为我在drawRect中为子视图分配了新的帧?试图找出持续重新触发的内容
needDisplay
override func resizeSubviewsWithOldSize(oldSize: NSSize) {
    let mbFrame = NSMakeRect(
        self.frame.size.width / 2 - (45 / 2),
        8,
        49,
        49
    )
    mainBtn.frame = mbFrame
}

override func drawRect(rect: NSRect) {
    super.drawRect(rect)
    NSColor(calibratedWhite: 0.1, alpha: 1).setFill()
    NSRectFill(rect)
}