QTMovie always in front ?

06:14 modifié dans API AppKit #1
Bonjour à  tous,

dans mon application j'intègre une QTMovie. Mais le hic c'est qu'elle est toujours au premier plan  :o

Pour vous expliquer la hierarchie de mes vues :

- window.contentView contient "myView1"
- "myView1" la QTMovie
- "myView2" apparait/disparait via un bouton toggle. je fais un simple window.contentView addSubview:myView1 puis myView1 removeFromSuperview.

La QTMovie est toujours au premier plan alors que myView2 devrait l'être à  sa place.
Bon évidemment j'ai pensé au fait que la QTMovie était en lecture, j'ai donc tenté avec un pause: puis affichage de myView2, et c'est toujours pareil.

Une solution ?  :-\\

Merci,
Louka.

Réponses

  • AliGatorAliGator Membre, Modérateur
    06:14 modifié #2
    Jamais testé mais ça ne m'étonne qu'à  moitié, étant donné que ce genre de composant utilise certainement les techniques d'overlay pour afficher les vidéos de façon optimisée...

    Du coup seule méthode que je vois si tu veux afficher une vue à  la place de ta QTView, c'est de masquer ta QTView (hidden = YES). Et si tu veux qu'une partie de ta vidéo soit visible quand tu affiches ta NSView par dessus elle, j'ai bien peur que tu ne puisses pas le faire directement (si c'est bien de l'overlay utilisé par QTView, parce que sinon c'est p'tet possible) et que tu sois obligé de passer par une astuce genre "mise en pause de ta QTMovie + capture du contenu de ta QTView à  l'instant T + masquage de ta QTView + la remplacer par une NSView contenant ladite capture"... mouais...


    Bon je met des réserves, j'ai rien testé et pas validé que ce soit de l'overlay ce qui explique ta restriction, mais bon, ça m'étonnerait pas qd mm.
  • 06:14 modifié #3
    Hmm la solution de capturer l'image à  l'instant T me parait un peu bizarre.. de la part d'Apple du moins.
    En fait, le hidden=YES est une bonne solution vu que j'ai 2 vues qui devront passer par dessus la movieView, et qui prennent la taille de la contentView. Le seul problème c'est que en mouseOver je veux afficher les controls du genre pause/play, mais personnalisés.. comme QuickTime en fullscreen ou iTunes lui-même lorsqu'on lit une vidéo. Et vu que la vidéo est toujours en lecture à  ce moment là  dans ces 2 logiciels, voilà  pourquoi la capture de l'image me paraà®t bizarre. il doit bien y avoir une technique.
  • AliGatorAliGator Membre, Modérateur
    06:14 modifié #4
    Ah nan mais la capture, d'une c'était une bidouille que je proposais si y'avait vraiment pas d'autre solution, et d'autre part ça supposait mettre la vidéo en pause...

    Mais c'est surtout parce que je savais pas ce que tu voulais faire, mettre des UIViews qui servent de contrôles personnalisés par dessus la vidéo en cours de lecture, ou si tu voulais remplacer ta QTView par une autre NSView pendant un temps (genre pour afficher un descriptif de la vidéo à  la place de ladite vidéo pendant un temps, puis remettre la vidéo à  la place après...), ou si tes NSViews devaient être à  cheval sur ta QTView et à  côté... bref je pouvais pas deviner :P

    Tu as essayé de mettre tes NSViews en subviews de ta QTView plutôt ?
    Ou sinon de créer une NSWindow frameless/borderless de type Bezel pour contenir des contrôles ? A mon avis c'est l'une ou l'autre de ces techniques qui est utilisée.
  • 06:14 modifié #5
    dans 1241653124:

    Ah nan mais la capture, d'une c'était une bidouille que je proposais si y'avait vraiment pas d'autre solution, et d'autre part ça supposait mettre la vidéo en pause...

    Mais c'est surtout parce que je savais pas ce que tu voulais faire, mettre des UIViews qui servent de contrôles personnalisés par dessus la vidéo en cours de lecture, ou si tu voulais remplacer ta QTView par une autre NSView pendant un temps (genre pour afficher un descriptif de la vidéo à  la place de ladite vidéo pendant un temps, puis remettre la vidéo à  la place après...), ou si tes NSViews devaient être à  cheval sur ta QTView et à  côté... bref je pouvais pas deviner :P

    Tu as essayé de mettre tes NSViews en subviews de ta QTView plutôt ?
    Ou sinon de créer une NSWindow frameless/borderless de type Bezel pour contenir des contrôles ? A mon avis c'est l'une ou l'autre de ces techniques qui est utilisée.


    L'idée d'une window frameless/borderless c'est super chiant au niveau du behavior  ::)
    Par contre je viens de trouver une option dans IB sur QTMovieView :
    Controls : Custom

    C'est déjà  une bonne piste pour implémenter mon hover avec des controls personalisés.

    Après il me restera plus qu'à  mettre pause lorsque la recherche doit passer au premier plan
  • 06:14 modifié #6
    Bon j'ai parlé un peu vite  :o apparamment c'est juste pour ajouter un custom button :(
    J'ai donc tenté le addSubview dans la QTMovieView .. et rien.
  • mai 2009 modifié #7
    Voilà  ce que ça donne en fait, que je fasse un movieView addSubview:otherView ou bien que je fasse myWindow.contentView addSubview:otherView, le "otherView" passe derrière l'image de la video  :

    qtmovie.png

    Edit : Il semblerait en effet que la solution soit de faire une fenêtre pour les controls persos... le truc super chiant quoi -.-
Connectez-vous ou Inscrivez-vous pour répondre.