A animação UIView consome tempo de CPU
-
27-10-2019 - |
Pergunta
Eu me pergunto como posso ter animações contínuas e repetidas em minhas visualizações sem congelar o resto do meu aplicativo - já que minhas abordagens atuais levam a 100% de animação, 0% de interação do usuário possível - o que é meio ... ruim.
a animação em geral é simples: eu quero fazer um uilabel agir como uma sirene, alterando a propriedade alfa de 1 para 0 e vice-versa.
o bloco básico de animação, portanto, é:
[UIView animateWithDuration:0.4f
delay:0.0f
options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionBeginFromCurrentState
animations:^(void){warningMessage.alpha = 0;}
completion:NULL];
Tentei chamá-lo em background, em backgroundthreads, mesmo em um bloco GCD assíncrono, cada vez que perco o controle do aplicativo - mas a animação funciona bem. (ok, os documentos da apple dizem que DEVE acontecer no tópico principal, mas eu tentei ..)
Agora, novamente, a questão: como ter os dois?é mesmo possível dessa forma?
Desde já, obrigado!
P.S .: Sry <✓if esta é uma repostagem e tanto, não encontrei uma solução / questão adequada aqui!
P.P.S: sim, eu sei que as sirenes não alteram sua propriedade alfa: P
Solução
você tentou adicionar UIViewAnimationOptionAllowUserInteraction ao sinalizador de opções?
Outras dicas
Bem .. fazer animações com o uikit com certeza é fácil .. mas eu não diria que é muito eficiente.Você apenas anima o alfa, mas há muito mais coisas acontecendo em segundo plano.:)
As animações já rodam em um tópico diferente .. então, iniciá-las em outro tópico não ajudará você.
Como solução, eu registraria um CADisplayLink em seu aplicativo e mudaria o alfa da visualização em sua função de atualização ... que será muito mais eficiente se você executá-lo o tempo todo.