你如何将正常控制放入NSView?

时间:2009-05-11 16:03:31

标签: cocoa webkit nsview screensaver

我实际上要做的是将WebKitView放入ScreenSaver(继承NSView)。我是MacOS X和Cocoa的新手(但我对Objective-C非常熟悉并且使用了GNUStep的某些部分)。我需要一些布局吗?我想在整个NSView中只显示一个控件。

3 个答案:

答案 0 :(得分:4)

initWithFrame:isPreview:方法中,在the usual way中创建一个WebView,然后向自己发送一条addSubview:消息,并传递网络视图:

webView = [[WebView alloc] initWithFrame:frame];
[self addSubview:webView];

如果您想知道应该将哪个矩形作为WebView的框架传递,请阅读View Programming Guide。另外,不要忘记在webView中发布dealloc(或在initWithFrame:isPreview:中自动发布)。

获得网络视图后,您需要将网页加载到其中。设置适当长的动画间隔(至少几秒钟),并在animateOneFrame中加载页面:

- (void) animateOneFrame {
    [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]]];
}

您可能还想处理WebViewProgressFinishedNotification,并推迟重新加载Web视图,直到发生这种情况(以补偿缓慢或浸泡的连接)。您将使用实例变量执行此操作,您在YES和通知处理程序方法中将其设置为initWithFrame:isPreview:,并在NO中测试并设置为animateOneFrame

- (void) animateOneFrame {
    if (hasFinished) {
        [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]]];
        hasFinished = NO;
    }
}

答案 1 :(得分:0)

[aScreenSaverView addSubview:aWebKitView];

但是,为什么只要让UIWebView自己占据整个屏幕,为什么要在屏幕保护程序视图中添加UIWebView?在不需要它们的地方引入视图层次结构并不是一个好主意,因为它增加了显示界面所需的处理。

答案 2 :(得分:0)

您也可以通过调用

来过多地关注动画片段间隔
[self stopAnimation];

animateOneFrame方法的最后。