gpt4 book ai didi

cocoa - needsDisplay 触发无限 drawRect 循环

转载 作者:可可西里 更新时间:2023-11-01 02:28:23 26 4
gpt4 key购买 nike

Whole app for context

似乎在这个mouseUp中设置needsDisplay处理程序,正在触发一个永无止境的绘图级联,我不确定为什么......

期望的效果是,一旦 mouseUp 更改了按钮的 mode 属性,当 drawRect 发生时,按钮的图标将简单地改变来自 the red circle , 至 the black square 没有上面 gif 中显示的级联图。

我已经缩小了范围,可以说原因是 the rect.origin.x being passed to MainView's drawRect function逐渐变大,宽度变小,但我无法弄清楚为什么

最佳答案

原来发生这种情况是因为我正在为 subview 分配新帧以尝试正确计算调整大小...这触发了绘制循环,因为我正在计算它并在 drawRect 中分配它们>.

原来有一个覆盖专门处理 View 调整大小事件。

resizeSubviewsWithOldSize:

从类似的地方更改相关代码

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
}

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)
}

让一切都很好。

关于cocoa - needsDisplay 触发无限 drawRect 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24880135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com