"Clignotant" et CoreAnimation
Mick
Membre
Bonjour à tous,
Je me permets de vous demander vos lumières sur CoreAnimation.
J'ai un layer layerFondNoir (non animé) et un layer layerLumiereRouge dont je voulais "animer" la propriété "opacity", avec une basicAnimation autoreverse. Le contenu du layer est fourni par un delegate dont j'ai implémenté la méthode drawLayer:inContext:
Le contenu du layer est bien dessiné comme il faut, mais aucune "animation" n'est visible. J'oublie sûrement quelque chose... J'ai à peu près suivi la doc. Voici la méthode qui setUp les layers :
Qu'ai-je fait de mal ? (je débute avec CoreAnimation ne développant pas pour iOS pour l'instant. En même temps, je suis prof, pas développeur...)
Je précise que le contenu des 2 layer est bien dessiné, mais tout est statique.
Je me permets de vous demander vos lumières sur CoreAnimation.
J'ai un layer layerFondNoir (non animé) et un layer layerLumiereRouge dont je voulais "animer" la propriété "opacity", avec une basicAnimation autoreverse. Le contenu du layer est fourni par un delegate dont j'ai implémenté la méthode drawLayer:inContext:
Le contenu du layer est bien dessiné comme il faut, mais aucune "animation" n'est visible. J'oublie sûrement quelque chose... J'ai à peu près suivi la doc. Voici la méthode qui setUp les layers :
<br />
<br />
- ([color=#c02d9d]void[/color])applicationDidFinishLaunching:([color=#c02d9d]id[/color])notif {<br />
[color=#4b8186]layerFondNoir[color=#000000]=[[[/color][color=#743fa4]CALayer[/color][color=#000000] [/color][color=#40207c]layer[/color][color=#000000]] [/color][color=#40207c]retain[/color][color=#000000]];[/color][/color]<br />
[color=#4b8186]layerFondNoir[color=#000000].[/color][color=#743fa4]frame[/color][color=#000000]=([/color][color=#743fa4]CGRect[/color][color=#000000])[[/color]laBeatView[color=#000000] frame];[/color][/color]<br />
[color=#4b8186][color=#000000][[/color]layerFondNoir[color=#000000] [/color][color=#40207c]setDelegate[/color][color=#000000]:[/color][color=#c02d9d]self[/color][color=#000000]];[/color][/color]<br />
[color=#4b8186]layerLumiereRouge[color=#000000]=[[[/color][color=#743fa4]CALayer[/color][color=#000000] [/color][color=#40207c]layer[/color][color=#000000]] [/color][color=#40207c]retain[/color][color=#000000]];[/color][/color]<br />
[color=#4b8186]layerLumiereRouge[color=#000000].[/color][color=#743fa4]frame[/color][color=#000000]=([/color][color=#743fa4]CGRect[/color][color=#000000])[[/color]laBeatView[color=#000000] frame];[/color][/color]<br />
[color=#4b8186][color=#000000][[/color]layerFondNoir[color=#000000] [/color][color=#40207c]setDelegate[/color][color=#000000]:[/color][color=#c02d9d]self[/color][color=#000000]];[/color][/color]<br />
[color=#4b8186][color=#000000][[/color]layerFondNoir[color=#000000] [/color][color=#40207c]insertSublayer[/color][color=#000000]:[/color]layerLumiereRouge[color=#000000] [/color][color=#40207c]below[/color][color=#000000]:[/color]layerFondNoir[color=#000000]];[/color][/color]<br />
[color=#40207c][color=#000000][[/color][color=#4b8186]laBeatView[/color][color=#000000] [/color]setWantsLayer[color=#000000]:[/color][color=#c02d9d]YES[/color][color=#000000]];[/color][/color]<br />
[color=#4b8186][color=#000000][[/color]laBeatView[color=#000000] [/color][color=#40207c]setLayer[/color][color=#000000]:[/color]layerFondNoir[color=#000000]];[/color][/color]<br />
[color=#40207c][color=#000000][[/color][color=#4b8186]layerFondNoir[/color][color=#000000] [/color]setNeedsDisplay[color=#000000]];[/color][/color]<br />
<br />
[color=#743fa4]CABasicAnimation[color=#000000] *animation=[[/color]CABasicAnimation[color=#000000] [/color][color=#40207c]animationWithKeyPath[/color][color=#000000]:[/color][color=#d62c24]@"opacity"[/color][color=#000000]];[/color][/color]<br />
animation.[color=#743fa4]duration[/color]=[color=#2f2fd0]1.0[/color];<br />
animation.[color=#743fa4]repeatCount[/color]=[color=#7a482f]HUGE_VAL[/color];<br />
animation.[color=#743fa4]fromValue[/color]=[[color=#743fa4]NSNumber[/color] [color=#40207c]numberWithFloat[/color]:[color=#2f2fd0]0.0[/color]];<br />
animation.[color=#743fa4]toValue[/color]=[[color=#743fa4]NSNumber[/color] [color=#40207c]numberWithFloat[/color]:[color=#2f2fd0]1.0[/color]];<br />
[color=#40207c][color=#000000][[/color][color=#4b8186]layerLumiereRouge[/color][color=#000000] [/color]addAnimation[color=#000000]:animation [/color]forKey[color=#000000]:[/color][color=#d62c24]@"opacity"[/color][color=#000000]];[/color][/color]<br />
<br />
}<br />
Qu'ai-je fait de mal ? (je débute avec CoreAnimation ne développant pas pour iOS pour l'instant. En même temps, je suis prof, pas développeur...)
Je précise que le contenu des 2 layer est bien dessiné, mais tout est statique.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Même avec HUGE_VALF, bah ... ça bouge pas.
CoreAnimation est bien moins intégré aux NSViews qu'aux UIViews; aussi, ce que tu pourras lire sur le net au sujet de iOS ne sera pas forcément vrai pour le Mac.
Là , tu es dans applicationDidFinishLaunching, vérifie que le pointeur sur laBeatView n'est pas nil, j'ai un doute.
J'ai cru que mes layers étaient bons car bien dessinés tout les deux .. en fait, le contenu est fourni par le meme délégué. j'ai donc fait un test if, sauf que, comme un boulet, j'ai écrit if(unLayer=layerFondNoir) au lieu de if(unLayer==layerFondNoir) !!! /whip.gif' class='bbc_emoticon' alt=' ' />
de ce fait, je perdais l'autre layer (leak) et le délégué traçait tout dans le même layer, à savoir le fond noir qui lui n'est pas animé.
Mais, il y avait toujours un problème : la frame du layer rouge, sublayer du layer noir a été initialisé à celle de la vue... donc pas du tout là où il fallait vu que le système de coordonnées est celle du superlayer, pas de la vue !
Bref, cela fonctionne maintenant parfaitement. Quand je pense à tous les noms dont j'ai traité core animation ...
Par contre, je galère un peu avec timingFunction : comment utiliser les points de controle ?... l'idée est d'avoir une fonction assez "pointue", une sorte de gaussienne avec un faible écart-type quoi (pour faire un "flash" court).