gpt4 book ai didi

objective-c - 如何从 NSViewController 中显示 View ?

转载 作者:行者123 更新时间:2023-12-03 16:26:06 26 4
gpt4 key购买 nike

我是 Objective-C 的新手,所以请耐心等待。我有一个类从网络摄像头返回图片,我正在尝试将其显示到屏幕上。我对 NSViewController 进行了子类化,以从相机类获取图像并将其设置为实例 NSImageView 并将 NSViewController 的 View 设置为 NSImageView 。我在 Interface Builder 中创建了一个自定义 View ,将 NSViewController 对象拖到 MainMenu.xib 中,将其类设置为 PhotoGrabberController,然后将控件从自定义 View 单击拖动到 PhotoGrabberController,以将其导出绑定(bind)设置为 View 。 (我真的不知道这在幕后是如何运作的,对我来说这似乎很神奇)。屏幕上没有显示任何内容,我一直在玩这个。

在 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 的 applicationDidFinishLaunching 中放置一堆不同的东西,但按照现在的设置方式,我认为我不需要在其中放置任何东西。

问题

  1. 如何让主窗口显示图像?
  2. 可以使用 PhotoGrabberController.view 而不是创建 View 子类吗?
  3. 我对这里的运作方式的理解有什么问题吗?我花了很多时间试图解决这个问题,但一无所获。
  4. 您能否指导我找到一个可以完全理解其工作原理的资源?我发现 Apple 文档过于详细和厚重。我只是想了解窗口、 View 和 View Controller 是如何加载和交互的。

最佳答案

How do I get the main window to show the image?

这是 View 的工作。

由于您已经有了 View ,因此只需将其放入窗口即可。一个窗口只直接保存一个 View ,称为它的内容 View ;最有可能的是,您希望将 View Controller 的 View 添加为已经是内容 View 的 View 的 subview ,或者添加为其他某个孙 View 的 subview 。

Is it ok to use PhotoGrabberController.view instead of creating a view subclass?

这些是正交的。 VC 的 View 是 View 类的实例。创建类与使用实例无关。

我认为创建 View 子类不会对您有帮助。您已经有两个工作 View :一个普通的 NSView 作为 VC 的直接 View ,以及其中的一个 NSImageView。无需子类即可将这些添加到 View (其中包含 ImageView )到窗口。

What is wrong with my understanding of how things work here?

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

此外,您以“我是 Objective-C 新手”(原文如此)开始您的问题,但您的问题是关于 Cocoa 框架(具体来说,AppKit 框架),而不是 Objective-C 语言。

Can you direct me to a resource where I can fully understand how this works?

Window Programming Guide (特别是 “How Windows Work” )和 View Programming Guide (特别是 “Working with the View Hierarchy” )。

关于objective-c - 如何从 NSViewController 中显示 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9861863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com