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