我实际上想要做的是将 WebKitView 放入 ScreenSaver(继承 NSView)中。我对 MacOS X 和 Cocoa 完全陌生(但我非常熟悉 Objective-C 并使用了 GNUStep 的某些部分)。我需要一些布局吗?我想在整个 NSView 中只显示一个控件。
3 回答
在您的方法中,以通常的方式initWithFrame:isPreview:
创建一个 WebView ,然后向自己发送一条消息,传递 Web 视图:addSubview:
webView = [[WebView alloc] initWithFrame:frame];
[self addSubview:webView];
如果您想知道应该将哪个矩形作为 WebView 的框架传递,请阅读View Programming Guide。另外,不要忘记释放webView
in 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:
,并测试并设置为NO
in animateOneFrame
:
- (void) animateOneFrame {
if (hasFinished) {
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]]];
hasFinished = NO;
}
}
[aScreenSaverView addSubview:aWebKitView];
但是,当您可以让 UIWebView 自己占据全屏时,为什么还要将 UIWebView 添加到屏幕保护程序视图中呢?在不需要的地方引入视图层次结构并不是一个好主意,因为它增加了显示界面所需的处理。
您也可以通过调用来不必担心动画间隔
[self stopAnimation];
在你的animateOneFrame
方法结束时。