2013-02-13 79 views
1

我无法获取视图边框的NSRect。我不断收到无法识别的选择器错误。无法识别的选择器 - [NSView borderRect]

下面是代码:

NSGradient *BorderGradient = [[NSGradient alloc] initWithStartingColor:[NSColor blackColor] endingColor:[NSColor whiteColor]]; 
[BorderGradient drawInRect:[self.window.contentView borderRect] angle:-90]; 
// Unrecognized Selector error here 

我试图访问边界矩形的颜色渐变添加到边境。而

NSRect rect = [self.window.contentView borderRect]; 
NSLog(@"origin.x = %f", rect.origin.x); 

如果试图将drawInRect转换:该代码也崩溃,当我试图通过自身访问borderRect,像这样的CGRect。像这样:

NSGradient *BorderGradient = [[NSGradient alloc] initWithStartingColor:[NSColor blackColor] endingColor:[NSColor whiteColor]]; 
[BorderGradient drawInRect:NSRectToCGRect([self.window.contentView borderRect]) angle:-90]; 
// Unrecognized Selector error here 

任何帮助将不胜感激。

谢谢!

回答

1

NSView没有名为-borderRect的方法。这是您实施的自定义方法吗? NSBox确实有一个-borderRect方法。你是否期望你的窗口的内容视图是一个NSBox的实例?你有没有检查过,这是真的。

也许你真的想要-frame-bounds

+0

好的,这非常有帮助。所以这不是我实现的自定义方法,但它仍然有效。我发现我的窗口内容视图不是NSBox的一个实例,但我仍然不需要-frame或-bounds。我想获取视图边框的NSRect并能够为其添加渐变。有任何想法吗? – 2013-02-13 16:49:26

+0

您应该创建一个NSView的自定义子类。在你的子类中,使用渐变绘制边框(重写'-drawRect:')。然后,让你的窗口的内容查看你的自定义子类的一个实例(你可以在Interface Builder中设置它,或者使用' - [NSWindow setContentView:'''编程创建窗口)。 值得一提的是,'-frame'和'-bounds'都返回一个NSRect,它实际上是定义视图边框的矩形。在您的自定义'-drawRect:'方法中,您必须使用'-bounds'来绘制矩形。 – 2013-02-13 16:52:10

+0

伟大的建议,这将很好,但这仍然会在视图的整个边界上创建一个渐变。我仍然在寻找一种方法在视图的边界上添加渐变(认为视图的边缘周围是薄的,彩色的渐变边框) - 而不是整个视图。你知道有什么办法吗? – 2013-02-13 20:29:02

1

NSView(取之于self.window.contentView返回)不具有borderRect方法,这是造成无法识别选择错误

您可能想要framebounds

相关问题