gpt4 book ai didi

cocoa - 未使用 setNeedsDisplay 调用drawRect

转载 作者:行者123 更新时间:2023-12-03 17:09:54 26 4
gpt4 key购买 nike

我的 ui 结构类似于 NSWindow -> NSViewController -> NSView(parent) -> NSView(target view)。目标 View 是从 XIB 文件中拖动的,而不是 addSubview。当显示 NSView(parent) 时,将调用 drawRect 函数,但之后我想使用 setNeedsDisplay 以编程方式再次调用drawRect,但它不起作用。我的方法有什么问题吗?

无论如何,我可以使用drawRect(view.frame)来实现这个,但我认为这不是一个好主意。

代码:

MyView.m

- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];

NSLog(@"asasa");
}

...
@property (weak) IBOutlet MyView *titleBarView;
...

-(IBAction)test:(id)sender
{
NSLog(@"%@",self.view.subviews); // contains the titleBarView
NSLog(@"%@",self.titleBarView); // not nil
[self.titleBarView setNeedsDisplay:YES]; // not call drawRect
}

titleBarView已连接

最佳答案

你现在所做的将会触发 drawRect:self.titleBarView ,但不是self.view 。触发drawRect:self.view (带有 NSLog 语句的那个​​),调用 setNeedsDisplayself.view .

- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];

NSLog(@"asasa");
}

...
@property (weak) IBOutlet MyView *titleBarView;
...

-(IBAction)test:(id)sender
{
NSLog(@"%@",self.view.subviews); // contains the titleBarView
NSLog(@"%@",self.titleBarView); // not nil
[self.titleBarView setNeedsDisplay:YES]; // this triggers the drawRect: method of self.titleBarView
[self.view setNeedsDisplay:YES]; // this triggers your drawRect: method with he NSLog statement
}

关于cocoa - 未使用 setNeedsDisplay 调用drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473795/

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