5 votes

Layering Cocoa WebView - Drawing on top ?

webview dans la couche d'animation principale

La seule autre discussion que j'ai trouvée est celle qui précède et qui ne correspond pas nécessairement à mes besoins. Est-ce qu'il y a un moyen fiable de simplement dessiner une vue au dessus d'une webview ? J'ai essayé de superposer une NSView normale à une WebView, et cela dessine bien au début, mais tout mouvement dans la webview (défilement de la page, etc.) semble invalider la vue et produit des artefacts visuels.

J'ai essayé :

[[[NSApp mainWindow] contentView] addSubview:view positioned:NSWindowAbove relativeTo:webView];

Pas de chance, mêmes problèmes - l'ordre des z ne semble pas fonctionner, à moins que quelque chose ne m'échappe.

S'agit-il d'une limitation des webviews ?

J'ai également essayé d'implémenter la vue ci-dessus sous la forme d'une fenêtre, ce qui a bien mieux fonctionné (il suffisait de contrôler l'emplacement de la fenêtre par programme). Cependant, le comportement souhaité est que l'utilisateur entre du texte dans cette fenêtre, mais qu'elle ne vole pas le "focus" -- c'est-à-dire que la fenêtre principale devient inactive (les x - + deviennent gris) lorsque l'utilisateur clique sur le champ de texte dans la nouvelle fenêtre. Comment éviter cela ?

J'ai essayé de sous-classer NSWindow et de surcharger canBecomeKey (retour YES) et canBecomeMain (retour NO) mais la fenêtre vole toujours le focus.

EDIT : Je pleure :-( Je n'arrive pas à trouver un moyen de contourner le problème du dessin sur webkit. Par contre, j'ai trouvé un moyen de forcer la fenêtre principale de mon application à garder l'état actif même si on a une fenêtre popup avec l'état de la touche. Cependant, cela a des conséquences inattendues lors de l'utilisation de la saisie de texte sur le dialogue popup (qui doit être forcé dans l'état de la fenêtre clé). Le retour arrière ne fonctionne pas : : secoue la tête : :, et les événements souris ne sont pas distribués aux vues webkit en dessous (pour les mouseovers sur les composants intégrés dans le html). Craptacular.

Josh

2voto

Alex Points 1

Un peu tard, mais je me suis heurté au même problème et deux ans après la question, je n'ai toujours pas trouvé la réponse. Dans mon cas, le fait de définir wantsLayer=YES sur la vue que je voulais dessiner au-dessus de la WebView a résolu le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X