UIpickerView

JekarJekar Membre
10:22 modifié dans API UIKit #1
Salut
encore une question de debutant !
J'ai un UIpickerView dans mon app, et je l'affiche /cache avec hidden, mais c est pas tres beau.
Comment le faire apparaitre en deroulé par le bas par exemple.
J'ai bien tenté de rajouter un UIview, mais j'y suis pas arrivé

Merci!!

Réponses

  • AliGatorAliGator Membre, Modérateur
    avril 2009 modifié #2
    Ca se fait par l'utilisation d'un CATransition.

    // Récupérer le dico des actions pour le modifier<br />CALayer* layer = myPickerView.layer;<br />NSMutableDictionary* myActions = [NSMutableDictionary dictionaryWithDictionary:[layer actions]];<br /><br />// Transition d&#39;insertion<br />CATransition* animIn = [CATransition animation];<br />animIn.type = kCATransitionMoveIn;<br />animIn.subtype = kCATransitionFromBottom;<br />[myActions setObject:animIn forKey: kCAOnOrderIn];<br /><br />// Transition de suppression<br />CATransition* animOut = [CATransition animation];<br />animOut.type = kCATransitionMoveIn;<br />animOut.subtype = kCATransitionFromTop;<br />[myActions setObject:animOut forKey: kCAOnOrderOut];<br /><br />// réaffecter ce dico d&#39;actions customisé au CALayer<br />layer.actions = myActions;<br />
    
    Voilà .
    Code inspiré des exemples trouvés dans la doc de CoreAnimation.

    Généralités sur les animations
    les actions (d'où j'ai tiré les noms des clés magiques associés à  l'insertion/suppression des vues et la base de code)

    Bon, pas testé, mais l'idée est là ...
  • JekarJekar Membre
    10:22 modifié #3
    Alors, j'ai fait comme ca :

    1- ajoute une subview, avec mon uipickerview
    2- ajouter ce code la ou il faut pour l affichage :

    [UIView beginAnimations:nil context:NULL];<br />		[UIView setAnimationDuration:1.0];<br />		[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];<br />		[self.view addSubview:Vue];<br />		[UIView commitAnimations];
    


    3- pour que ca disparaisse, j ai juste changé ca :
    [Vue removeFromSuperview];
    


    C'est correcte ou pas?
  • AliGatorAliGator Membre, Modérateur
    avril 2009 modifié #4
    A priori oui ta solution est tout à  fait valable. Sauf qu'elle va ajouter une transition de type "CurlDown" alors qu'il me semblais que tu voulais une transition de type "MoveIn" où on voit apparaà®tre ton PickerView depuis le bas de l'écran, un peu comme quand le claver de l'iPhone apparaà®t à  l'écran ?


    En fait pour ajouter des animations, tu as 2 moyens sur iPhone :

    - La solution que tu as utilisée, avec [UIView beginAnimations:... context:...] et [UIView commitAnimation] pour prendre en sandwich les propriétés à  animer... ce qui permet en peu de lignes et sans se prendre le chou d'ajouter des animations sympa en 2 temps 3 mouvements... Mais le choix des animations peut vite s'avérer limité, même si dans 80% des cas il peut suffire.

    - L'autre solution est de créer toi même une CAAnimation (en fait une CABasicAnimation, CAKeyframedAnimation ou encore une CATransition, toutes 3 sous-classes de CAAnimation) puis de "l'installer" (soit avec la méthode "addAnimation: forKey" de CALayer pour la faire démarrer tout de suite, soit en la définissant en tant qu'action à  déclencher sur un événement genre insertion de la vue dans sa superview, etc.)

    Les 2 sont valables, la 2e solution étant un peu moins directe (là  où la première s'utilise facilement sans se prendre le chou) mais plus complète et flexible. Par exemple justement en utilisant la méthode [UIView beginAnimation:.. context:..] tu ne peux pas utiliser la transition de type "MoveIn" qui ferait apparaà®tre ta vue depuis le bas de l'écran, d'où l'utilisation d'une CATransition dans mon exemple. Mais pour d'autres effets plus simples, la méthode 1 suffit amplement.


    ----

    Sinon la petite note au passage, pour une raison obscure, Apple n'a pas daigné implémenter les animations CurlUp et CurlDown sur le simulateur (alors qu'elles fonctionnent très bien sur un vrai iPhone). Ce qui veut dire que ces effets de CurlUp et CurlDown ne sont pas visibles dans le simulateur (ça vaut le coup d'utiliser un autre effet pour les tests sur simulateur pour tester que tes animations fonctionnent bien, car sinon si ça ne marche pas tu ne sauras pas si ça vient de la non disponibilité de l'animation CurlDown sur le simulateur ou d'une erreur de code de ta part...
  • JekarJekar Membre
    10:22 modifié #5
    rien que  cette ligne me renvoie une erreur :
    CATransition* anim = [CATransition animation];

    CATransition undeclared....  :(
  • AliGatorAliGator Membre, Modérateur
    10:22 modifié #6
    CATransition Class Reference


    Inherits fromCAAnimation : NSObject
    Conforms toNSCoding (CAAnimation)
    NSCopying (CAAnimation)
    CAAction (CAAnimation)
    CAMediaTiming (CAAnimation)
    NSObject (NSObject)
    Framework/System/Library/Frameworks/QuartzCore.framework
    AvailabilityAvailable in Mac OS X v10.5 and later.
    Declared inCAAnimation.h
    Companion guidesCore Animation Programming Guide
    Core Animation Cookbook
  • JekarJekar Membre
    10:22 modifié #7
    Vui vui, il est ajouté a mon projet :)
  • AliGatorAliGator Membre, Modérateur
    10:22 modifié #8
    Et le [tt]#import <QuartzCore/QuartzCore.h>[/tt] aussi ? (ou au moins [tt]#import <QuartzCore/CAAnimation.h>[/tt] au minimum) ?
  • JekarJekar Membre
    10:22 modifié #9
    Oups  :p
Connectez-vous ou Inscrivez-vous pour répondre.