1

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

4

3 回答 3

5

在您的方法中,以通常的方式initWithFrame:isPreview:创建一个 WebView ,然后向自己发送一条消息,传递 Web 视图:addSubview:

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

如果您想知道应该将哪个矩形作为 WebView 的框架传递,请阅读View Programming Guide。另外,不要忘记释放webViewin dealloc(或 autorelease it in initWithFrame:isPreview:)。

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

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

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

- (void) animateOneFrame {
    if (hasFinished) {
        [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]]];
        hasFinished = NO;
    }
}
于 2009-05-11T16:45:07.887 回答
0
[aScreenSaverView addSubview:aWebKitView];

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

于 2009-05-11T16:08:50.753 回答
0

您也可以通过调用来不必担心动画间隔

[self stopAnimation];

在你的animateOneFrame方法结束时。

于 2009-07-09T05:54:30.283 回答