如何从NSViewController显示视图?

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但它现在的设置方式我认为我不需要在那里放任何东西.

  1. 如何让主窗口显示图像?
  2. 是否可以使用PhotoGrabberController.view而不是创建视图子类?
  3. 我对这里的工作原理的理解有什么问题?我花了很多时间试图解决这个问题并且无处可去.
  4. 你能指导我一个资源,我可以完全理解它是如何工作的吗?我发现Apple文档太详细和厚实.我只是想了解如何加载和交互窗口,视图和视图控制器.

Pet*_*sey 6

如何让主窗口显示图像?

这是一个观点的工作.

由于您已经有了视图,因此您只需将其放入窗口即可.一个窗口只能直接保存一个视图,称为内容视图; 最有可能的是,您需要将视图控制器的视图添加为已经是内容视图的视图的子视图,或者作为其他孙视图的子视图.

是否可以使用PhotoGrabberController.view而不是创建视图子类?

这些是正交的.VC的视图是视图类的实例.创建类与使用实例无关.

我不认为创建一个视图子类会帮助你.您已经有两个工作视图:一个普通的NSView作为VC的直接视图,以及一个NSImageView.不需要子类将这些子类添加到视图中 - 使用其中的图像视图 - 到窗口.

我对这里的工作原理的理解有什么问题?

您错过了视图层次结构的整个概念,以及这样的层次结构是每个窗口显示其内容的方式.

此外,您开始使用"我是Objective-c的新手"(原文如此),但您的问题是关于Cocoa框架(特别是AppKit框架),而不是Objective-C语言.

你能指导我一个资源,我可以完全理解它是如何工作的吗?

窗口编程指南(特别是"Windows如何工作")和视图编程指南(特别是,"与视图层次工作").