Objective c 如何从NSViewController显示视图?
我是objective-c的新手,请耐心听我说。我有一个从网络摄像头返回图片的类,我正在尝试将其显示到屏幕上。我将Objective c 如何从NSViewController显示视图?,objective-c,macos,cocoa,nsimageview,nsviewcontroller,Objective C,Macos,Cocoa,Nsimageview,Nsviewcontroller,我是objective-c的新手,请耐心听我说。我有一个从网络摄像头返回图片的类,我正在尝试将其显示到屏幕上。我将NSViewController子类化,以从camera类获取图像,并将其设置为实例NSImageView,并将NSViewController的视图设置为NSImageView。我已经在Interface Builder中创建了一个自定义视图,将NSViewController对象拖到MainMenu.xib中,将其类设置为PhotoGrabberController,然后单击控件
NSViewController
子类化,以从camera类获取图像,并将其设置为实例NSImageView
,并将NSViewController
的视图设置为NSImageView
。我已经在Interface Builder中创建了一个自定义视图,将NSViewController对象拖到MainMenu.xib中,将其类设置为PhotoGrabberController,然后单击控件将其从自定义视图拖到PhotoGrabberController中,以将其出口绑定设置为视图。(我真的不知道这在幕后是如何运作的,对我来说这似乎是一种魔力)。屏幕上什么也没显示,我一直在玩这个游戏
在PhotoGrabberController.h中
@interface PhotoGrabberController : NSViewController {
PhotoGrabber * grabber;
NSImageView* iView;
}
@property (nonatomic, retain) NSImageView* iView;
在PhotoGrabberController.m中
@implementation PhotoGrabberController
@synthesize iView,grabber;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void) awakeFromNib
{
self = [super init];
if (self) {
NSRect rect = NSMakeRect(10, 10, 200, 100);
iView = [[NSImageView alloc] initWithFrame:rect];
[iView setImageScaling:NSScaleToFit];
[iView setImage:[NSImage imageNamed:@"picture.png"]];
grabber = [[PhotoGrabber alloc] init];
grabber.delegate = (id)self;
//[grabber grabPhoto]; (This usually sets iView but I removed it and manually set iView to be an image from file above for simplicity)
[self setView:iView];
}
}
我曾在AppDelegate的applicationdFinishLaunching
中尝试过放一些不同的东西,但就目前的设置方式而言,我认为我不需要在其中放任何东西
问题:
(特别地,)和(特别地,)。嗨,谢谢你的详尽回答。我想我的第二个问题用词不对。我想问的是,创建PhotoGrabberController.view而不是创建NSView子类的实例并使用它有什么区别?PhotoGrabberController.view只是NSView的常规实例吗?@user1267383:您可以看到VC的nib中VC的视图是什么类型的对象。选择视图并在大纲检查器中查看。默认情况下,VC的视图是普通视图。在这种情况下,除了一种方法是在nib中创建所有内容,另一种方法是在代码中创建所有内容,没有那么彻底,只是一个措辞巧妙的RTFM“答案”。代码总是更好。否则,我完全有能力自己解释高级概念。当有人在寻找一种技术时,无意中点击了这样一个“答案”,这完全是在浪费他们的时间。@johnrubytect我看到过很多来自你的批评,都是这样的:没有现成的复制粘贴代码,这不仅意味着答案不好,而且回答者不知何故也会对你造成个人侮辱。放轻松点。@johnrubytecat事实上,在你自己的十个答案中(那些不是作为答案不恰当地张贴的问题),你似乎和你批评的人一样有罪。如果你想让人们指责你“浪费时间”,也许你应该自己树立一个更好的榜样。或者向你的医生要锂。