Frage

Was ich versuche eigentlich zu tun setzen eine WebKitView in einen Screensaver (die NSView erbt). Ich bin völlig neu für MacOS X und Kakao (aber ich bin sehr vertraut mit Objective-C und verwenden einige Teile GNUStep). Muss ich einige Auslegen? Ich möchte nur eine Kontrolle in der ganzen NSView zeigen.

War es hilfreich?

Lösung

In der initWithFrame:isPreview: Methode, erstellen Sie eine WebView in die übliche Art und Weise , dann, selbst eine addSubview: Nachricht senden, die Ansicht Bahn übergeben:

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

Wenn Sie sich fragen, was Rechteck, das Sie als die WebView-Rahmen passieren sollte, lesen Sie die Ansicht Programming Guide . Vergessen Sie auch nicht die webView in dealloc zu lösen (oder Autorelease es in initWithFrame:isPreview:).

Wenn Sie Ihre Web-Ansicht haben, müssen Sie eine Seite hinein laden. Legen Sie ein entsprechend langes Animationsintervall (mindestens ein paar Sekunden), und laden Sie die Seite in animateOneFrame:

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

Sie können auch WebViewProgressFinishedNotification zu handhaben, und wieder Laden der Web-Ansicht aufschieben, bis das passiert (für langsame oder getränkt Verbindungen zu kompensieren). Sie tun dies mit einer Instanzvariablen, die Sie in beiden YES und Ihre notification-Handler-Methode und Test und auf initWithFrame:isPreview: in NO auf animateOneFrame:

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

Andere Tipps

[aScreenSaverView addSubview:aWebKitView];

Aber warum eine UIWebView in eine Bildschirmschoner-Ansicht, wenn Sie nur die UIWebView den gesamten Bildschirm auf eigenem nehmen machen? Ansicht Hierarchien Einführung, wo sie nicht benötigt werden, ist keine gute Idee, weil es um die Verarbeitung erhöht notwendig, um die Schnittstelle anzuzeigen.

Sie können auch keine Sorgen zu viel über Ihre Animation Intervall durch den Aufruf

[self stopAnimation];

am Ende Ihrer animateOneFrame Methode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top