use*_*383 2 macos cocoa objective-c nsviewcontroller nsimageview
我是Objective-c的新手所以请耐心等待.我有一个类从网络摄像头返回图片,我试图将其显示在屏幕上.我将子类NSViewController
从相机类中获取并将其设置为实例NSImageView
,并将其NSViewController
视图设置为NSImageView
.我在Interface Builder中创建了一个自定义视图,将一个NSViewController对象拖到MainMenu.xib中,将它的类设置为PhotoGrabberController,并从自定义视图中单击拖动控件到PhotoGrabberController,将其出口绑定设置为视图.(我真的不知道幕后是怎么回事,对我来说似乎很神奇).没有任何东西出现在屏幕上,我一直在玩这个.
在PhotoGrabberController.h中
@interface PhotoGrabberController : NSViewController {
PhotoGrabber * grabber;
NSImageView* iView;
}
@property (nonatomic, retain) NSImageView* iView;
Run Code Online (Sandbox Code Playgroud)
在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];
}
}
Run Code Online (Sandbox Code Playgroud)
我玩弄了一堆不同的东西在AppDelegate中,applicationDidFinishLaunching
但它现在的设置方式我认为我不需要在那里放任何东西.
如何让主窗口显示图像?
这是一个观点的工作.
由于您已经有了视图,因此您只需将其放入窗口即可.一个窗口只能直接保存一个视图,称为内容视图; 最有可能的是,您需要将视图控制器的视图添加为已经是内容视图的视图的子视图,或者作为其他孙视图的子视图.
是否可以使用PhotoGrabberController.view而不是创建视图子类?
这些是正交的.VC的视图是视图类的实例.创建类与使用实例无关.
我不认为创建一个视图子类会帮助你.您已经有两个工作视图:一个普通的NSView作为VC的直接视图,以及一个NSImageView.不需要子类将这些子类添加到视图中 - 使用其中的图像视图 - 到窗口.
我对这里的工作原理的理解有什么问题?
您错过了视图层次结构的整个概念,以及这样的层次结构是每个窗口显示其内容的方式.
此外,您开始使用"我是Objective-c的新手"(原文如此),但您的问题是关于Cocoa框架(特别是AppKit框架),而不是Objective-C语言.
你能指导我一个资源,我可以完全理解它是如何工作的吗?
该窗口编程指南(特别是"Windows如何工作")和视图编程指南(特别是,"与视图层次工作").