Bring to Front

muqaddarmuqaddar Administrateur
04:09 modifié dans API AppKit #1
Yop,

Comment on bring to Front un élément ds le code, sans passer par IB ?
merci

Réponses

  • BruBru Membre
    04:09 modifié #2
    Tu parles bien de NSView "empilées" ?

    .
  • muqaddarmuqaddar Administrateur
    04:09 modifié #3
    NSImageView
  • BruBru Membre
    04:09 modifié #4
    Dans ce cas, l'empilement est déterminé par la hiérarchie des views "soeurs" dans la super view.

    A mon avis IB utilise addSubview:positioned:relativeTo: pour réordonner les vues entre elles.

    PS : jouer sur l'empilement des views est la pire chose à  faire. Apple le déconseille par ailleurs.

    .
  • muqaddarmuqaddar Administrateur
    04:09 modifié #5
    En fait, j'avais une TextView par dessus une imageView.
    Or lorsque j'affichais mon texte, la seule partie de l'imageView visible correspondait à  la taille de la textView !
    J'ai trouvé une première parade en adaptant la taille de la textView à  l'imageView, mais je trouve ça étonnant.
  • BruBru Membre
    04:09 modifié #6
    Voici ce que dit Apple :
    For performance reasons, the Application Kit does not enforce clipping among sibling views, or guarantee correct invalidation and drawing behavior when sibling views overlap. If you want a view to be drawn in front of another view, you should make the front view a subview (or descendant) of the rear view.

    (doc ici)

    En substance, le système ne créé pas de "clipping regions" (zone d'affichage visible) lors de l'affichage de views soeurs quand elles se chevauchent, et ceci pour des questions de performance. Si tu veux qu'une vue s'affiche par dessus une autre, alors tu dois mettre cette vue en subview de la vue qui sera dessous.

    .
  • muqaddarmuqaddar Administrateur
    04:09 modifié #7
    Merci Bru.

    En plus je suis dans une fenêtre transparente, ça n'arrange pas les choses.
  • fouffouf Membre
    04:09 modifié #8
    Je pensais à  un truc : au lieu d'empiler les deux vues, pourquoi pas juste créer une customView dans IB, puis tu utilise [view addSubview:] et removeSubView. Ca serait plus pratique non ??.
  • muqaddarmuqaddar Administrateur
    04:09 modifié #9
    Cela marcherait avec NSImageView ?
    J'ai une NSImageView + un NSTextField en fait à  empiler... donc ça doit être autre chose.
    merci.
  • CoreCore Membre
    04:09 modifié #10
    dans le meme genre j'ai deux boutons personnalisés qui se superpose sur un petit bout. Le probleme c'est que lorsqu'on clique sur celui en dessous hop il passe par dessur l'autre

    Comment eviter ce changement de plan ?
  • mpergandmpergand Membre
    04:09 modifié #11
    Dans IB joue avec le menu Layout->Bring To Front et Send To Back

    Teste avec File->Test Interface
  • CoreCore Membre
    04:09 modifié #12
    dans 1110967945:

    Dans IB joue avec le menu Layout->Bring To Front et Send To Back

    Teste avec File->Test Interface


    quand mes boutons sont off pas de souci je fais ca avec IB et ca roule.
    Par contre avec Xcode je fais changer l'image du bouton quand l'utilisateur clic.
    Cette action me ramene automatiquement le bouton au premier plan , hors je veux qu'il reste fidele à  ce que j'ai fait dans IB c-a-d qu'il reste en arriere plan
  • mpergandmpergand Membre
    04:09 modifié #13
    Et oui, il faut que tu provoques le redessin de tous les objets qui se chevauchent ...
  • CoreCore Membre
    04:09 modifié #14
    j'ai essayé un

    [super setNeedsDisplay:YES]
    


    mais ca ne fonctionne pas , comment faut il faire pour redessiner tous mes boutons alors ? 
  • BruBru Membre
    04:09 modifié #15
    dans 1110980237:

    j'ai essayé un

    [super setNeedsDisplay:YES]
    


    mais ca ne fonctionne pas , comment faut il faire pour redessiner tous mes boutons alors ? 


    Ne confonds-tu pas super avec superview par hasard...

    .
  • CoreCore Membre
    mars 2005 modifié #16


    Ne confonds-tu pas super avec superview par hasard...



    C'est bien probable mon bon monsieur  :o

    [[self superview] setNeedsDisplay:YES]
    


    ca marche vachement mieux ;)
Connectez-vous ou Inscrivez-vous pour répondre.