2009-05-11 10 views
0

Ce que j'essaie réellement de faire est de mettre un WebKitView dans un ScreenSaver (qui hérite de NSView). Je suis totalement nouveau sur MacOS X et Cocoa (mais je connais très bien Objective-C et j'ai utilisé certaines parties de GNUStep). Ai-je besoin d'un lay-out? Je veux montrer seulement un contrôle dans le NSView entier.Comment mettre un contrôle normal dans un NSView?

Répondre

4

Dans votre méthode initWithFrame:isPreview:, créez un WebView dans the usual way, puis, envoyez-vous un message addSubview:, en passant la vue Web:

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

Si vous vous demandez ce rectangle que vous devez passer comme cadre de la WebView, lisez le View Programming Guide. Aussi, n'oubliez pas de libérer le webView en dealloc (ou autorelease le dans initWithFrame:isPreview:).

Une fois que vous avez votre vue Web, vous devez charger une page dans celle-ci. Définir un intervalle d'animation suffisamment longue (au moins quelques secondes), et charger la page dans animateOneFrame:

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

Vous pouvez également gérer WebViewProgressFinishedNotification, et de mettre hors rechargeons la vue Web jusqu'à ce que cela arrive (pour compenser les connexions lentes ou imbibées). Vous allez faire cela avec une variable d'instance, que vous définissez à YES dans les deux initWithFrame:isPreview: et votre méthode de notification de gestionnaire et de test et mettre à NO en animateOneFrame:

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

Je ne fais que commencer, donc mon économiseur d'écran peut être n'importe quoi. Je l'ai créé avec Xcode et le plugin Screen Saver Standard Apple, mais le projet n'était pas livré avec un fichier nib ou nix, seulement un View.h et un View.m. Je serais parfaitement heureux de travailler avec un fichier nib, comment puis-je faire cela? Merci Peter. – Pablo

+0

Désolé, cela fait longtemps que j'ai travaillé avec le framework ScreenSaver. J'ai édité ma réponse. –

+0

Merci pour la réponse, semble prometteur. – Pablo

0
[aScreenSaverView addSubview:aWebKitView]; 

Mais pourquoi ajouter une UIWebView en vue de l'économiseur d'écran lorsque vous pouvez simplement faire le UIWebView prendre le plein écran sur son propre? Introduire des hiérarchies de vues là où elles ne sont pas nécessaires n'est pas une bonne idée car cela augmente le traitement nécessaire pour afficher l'interface.

+0

J'ai essayé [aScreenSaverView addSubview: aButton] et cela n'a pas fonctionné. Ai-je raté quelque chose ou les vues de webkit sont juste plus cool que les boutons? Je ne comprends pas ce que vous dites de faire en sorte que UIWebView prenne le plein écran, un économiseur d'écran ne doit-il pas hériter de ScreenSaver? – Pablo

+0

il écrit un économiseur d'écran du cadre de l'économiseur d'écran, pas l'application iphone –

+1

Oh mon mauvais. Je dois avoir mal interprété votre question. Excuses. –

0

Vous pouvez également vous inquiétez pas trop sur votre intervalle d'animation en appelant

[self stopAnimation]; 

à la fin de votre méthode animateOneFrame.

Questions connexes