"Implicit animation" qui ne marche pas

GreensourceGreensource Membre
Je suis entrain de parcourir la Doc sur Core Animation.
Je vois que les CALayer ont des properties qui s'anime automatique, on a juste à  changer leur valeurs.
Sauf que moi quand je fait:
[self.view.layer setHidden:YES];

Bas ça ne s'anime pas du tout, pourtant c'est écris noir sur blanc:
For example, setting a layer's hidden property to YES triggers an animation that causes the layer to gradually fade away


Quelqu'un sait pourquoi?

Réponses

  • AliGatorAliGator Membre, Modérateur
    07:03 modifié #2
    Est-ce que, si tu mets à  la place : [tt]self.view.layer.alpha = 0.f;[/tt] ça marche mieux ?
    Bien sûr tu as inclus le framework CoreAnimation (enfin QuartzCore.framework quoi) dans ton projet ?
  • GreensourceGreensource Membre
    07:03 modifié #3
    Alors, j'ai pas trouver de property alpha, je pense que tu voulais parler de opacity. Mais ça ne change rien, c'est toujours pas animé.
  • MalaMala Membre, Modérateur
    07:03 modifié #4
    Tu as bien fait un "setWantsLayer" sur ta vue?
  • AliGatorAliGator Membre, Modérateur
    07:03 modifié #5
    Bonne remarque, sauf que là  où sur MacOSX en effet il faut préciser qu'on veut un CALayer sur la NSView avec setWantsLayer, sur iPhone toutes les UIViews ont des CALayer de base...
  • GreensourceGreensource Membre
    07:03 modifié #6
    Oui en effet le layer semble déjà  inclus.
    Et oui j'ai bien ajouté QuartzCore...

    Je vais chercher des samples codes, mais c'est quand même bizarre. C'est pas un truc d'iOS4 les anim' automatique on est bien d'accord? Parce que là  je suis encore en 3.1.3
  • AliGatorAliGator Membre, Modérateur
    juin 2010 modifié #7
    Non non moi je l'utilisais déjà  bien avant.

    Regarde le Sample "TouchMe" (ou TouchMove ou je sais plus quoi), quoique je me demande s'ils utilisent pas une animation explicite pour ça mais bon ça vaut le coup de regarder...
  • GreensourceGreensource Membre
    07:03 modifié #8
    Je pense que tu voulais parler de MoveMe. Malheureusement ils utilisent que des animations explicites  :(

    Ya vraiment un truc que je pige pas, je vais essayer de repartir d'un truc hyper simple. Genre si j'ouvre un projet avec le template "View-based Application", que je fait juste:
    - (void)viewDidAppear:(BOOL)animated<br />{<br />	self.view.layer.backgroundColor = [[UIColor redColor] CGColor];<br />}
    

    (Dans le UIViewController)

    Ca devrais marché non? Parce que moi nan ça ce met rouge direct. Quelqu'un veut bien essayé, ça prend 15 secondes chrono
  • yoannyoann Membre
    07:03 modifié #9

    <br />- (void)viewDidAppear:(BOOL)animated<br />{<br />	[UIView beginAnimations:nil context:NULL];<br />	[UIView setAnimationDuration:3];<br />	self.view.layer.backgroundColor = [[UIColor redColor] CGColor];<br />	[UIView commitAnimations];<br />}<br />
    


    Pour l'iPhone il faut préciser tes bornes d'animation implicite contrairement au Mac, mais même avec ça, ça reste de l'implicite, on passe en explicite quand tu commence a définir tes CAAnimation à  la main.
  • GreensourceGreensource Membre
    07:03 modifié #10
    Ok super, ça marche! Par contre, autant avec opacity ça roule, mais alors pour hidden je vois pas où ils l'a voient l'implicit animation, ou alors elle a une durée nulle...

    Merci bien a tous en tout cas!
  • MalaMala Membre, Modérateur
    07:03 modifié #11
    dans 1277365573:

    Bonne remarque, sauf que là  où sur MacOSX en effet il faut préciser qu'on veut un CALayer sur la NSView avec setWantsLayer, sur iPhone toutes les UIViews ont des CALayer de base...

    J'avais pas lu qu'on parlais de l'iPhone. La section commune est pas forcément appropriée dans ce cas. Sinon pour rebondir sur ce que disait Yoann, les transactions explicitent deviennent aussi obligatoires dès qu'on est pas dans le thread principal. Mais dans le cas de l'iPhone ce genre de situation doit être marginale.
  • GreensourceGreensource Membre
    07:03 modifié #12
    Je me posais la question de la section justement avant de posté mais comme je pensais que j'était dans un cas général, j'ai posté ici. C'est seulement en cours de discussion qu'il s'est avéré qu'il y a des éléments spécifique à  iOS.
  • DrakenDraken Membre
    juillet 2010 modifié #13
    A partir de l'iOS 4, Apple recommande de ne plus utiliser beginAnimation, mais animateWithDuration:

    - (void) viewDidAppear:(BOOL)animated<br />{<br />	[UIView animateWithDuration:3.0<br />		&nbsp; &nbsp; animations:^{ self.view.backgroundColor = [UIColor redColor]; }<br />		&nbsp; &nbsp; completion:NULL];<br />}<br />
    


  • GreensourceGreensource Membre
    07:03 modifié #14
    Ah bon à  savoir merci Draken!
  • dRinedRine Membre
    07:03 modifié #15
    Pour suivre les recommandations iOS4, j'ai voulu me mettre à  [tt]animateWithDuration[/tt].
    Mais je ne comprends pas comment on définit le type d'animation.
    Voici le code de mon essai mais cela ne semble pas être correct !

    [tt][UIView animateWithDuration:1
              delay:0
          options:UIViewAnimationOptionTransitionCurlUp
    animations:^{...}
    completion:NULL][/tt]

    Merci d'avance !
Connectez-vous ou Inscrivez-vous pour répondre.