我只是没有得到这个,我想在用户点击按钮时在我的应用中显示一个视图。
我已经走到这一步了:
NSView* unitMarker = [[NSView alloc] initWithFrame: NSMakeRect( 20.0, 20.0, 80.0, 50.0 ) ];
如何以红色背景显示此视图?
由于
答案 0 :(得分:1)
@Mike:你对你想做的事情的描述有点模糊。我们有一些代码创建,一个视图,但没有上下文告诉我们你正在尝试做什么。您是希望视图出现在新窗口中还是相同?您想要替换已存在的视图吗?我们甚至不知道你的技能水平。
我建议你查看NSView的文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html
答案 1 :(得分:1)
反复大声说出10次:
Interface Builder是我的朋友。
通过利用Interface Builder作为流程的一部分,我能够在大约5分钟内完成一个样本项目,完成您想要做的事情。 http://www.markdouma.com/developer/ShowWindowWithRedView.zip。
如果不首先将视图放在窗口中,则无法显示视图;到目前为止,执行此类操作的最简单方法是在Interface Builder中拖出第二个窗口,将其设置为在启动时不可见,将通用NSView自定义视图拖到Window上,将其类设置为SRRedView(您的红色视图子类)。正如d11wtq发布的那样,你可以覆盖NSView的原始绘图方法,就像他所展示的那样(虽然我个人更喜欢NSBezierPath :-P)。
在您的控制器类中,您定义IBOutlets,然后在Interface Builder中将它们挂钩。这些为您提供了一种引用界面重要部分的方法,以便您可以通过编程方式对它们进行操作。
我添加了一个IBAction方法,主窗口中的按钮被连接起来调用。该方法只是告诉第二个窗口显示自己。
- (IBAction)showWindowWithRedView:(id)sender {
[windowWithRedView makeKeyAndOrderFront:nil];
}
在我做Cocoa编程的8年或更长时间里,我认为我不需要手动创建窗口和视图。简单地加载另一个包含我需要显示的窗口或视图的nib文件总是快得多。使用Interface Builder和Xcode创建应用程序与其他IDE的工作方式有很大不同。 (具体来说,当您在Interface Builder中安排内容时,您不会像创建UI对象的实例那样生成代码,然后将它们以当前的方式“冻结”到.nib存档文件中。当您启动应用程序时,它们被带回了生命。或者至少就是我对它的看法。)
答案 2 :(得分:1)
我已经走到了这一步:
NSView* unitMarker = [[NSView alloc] initWithFrame: NSMakeRect( 20.0, 20.0, 80.0, 50.0 ) ];
如何以红色背景显示此视图?
你不会,因为普通的NSView不会画任何东西。
首先,您需要子类化NSView,在该子类中实现drawRect:
以用红色填充其边界,并直接实例化该子类而不是NSView。
您应该阅读View Programming Guide。
我如何显示此视图...
你不会。视图在适当时显示。
在你add it to a view hierarchy之前,它不适合自己画画。每个窗口都有一个,以其内容视图为根。您需要将此视图添加到内容视图或内容视图的某些后代视图(子视图,子视图的子视图等)。
您通常不应该告诉控制器显示视图。那是窗口的工作。当您更改影响其绘制内容的视图的一个或多个属性set the view as needing display时,让窗口告诉视图显示何时适合这样做。
答案 3 :(得分:0)
Xcode Tutorial: How to make your first 3.0 iPhone/iPod app!
帮助自己,然后其他人会帮助你
答案 4 :(得分:0)
您需要继承NSView并实现drawRect:
。
在这种情况下,你只需用红色填充整个矩形。
@interface MyView : NSView {
}
@end
@implementation MyView
-(void)drawRect:(NSRect)dirtyRect {
[[NSColor redColor] set];
NSRectFill(dirtyRect);
}
@end
这是一个非常基本的例子,可以做你想要的,但如果你想做更复杂的事情(添加边框(笔画)或绘制曲线(路径)等),那么你需要学习所有可用的绘图类
Scott Stevenson撰写了一些易于学习的教程:
http://cocoadevcentral.com/d/intro_to_quartz/和; http://cocoadevcentral.com/d/intro_to_quartz_two/