Eu tenho uma subclasse UIView
que é composto de várias camadas (principalmente CAShapeLayers
com alguns CATextLayers
) O problema que tenho é que se eu animar o redimensionamento do UIView
usando um bloco de animação (beginAnimations
, commitAnimations
) e retransmitir as subcamadas no sobrescrito layoutSubviews
, então as camadas não são animadas com o UIView
.
Abaixo está meu código para animar o quadro do UIView
:
miniView.backgroundColor = [UIColor orangeColor];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatCount:MAXFLOAT];
[UIView setAnimationRepeatAutoreverses:YES];
miniView.frame = newFrame;
[UIView commitAnimations];
Então, o problema é que a vista é adequadaanimadas, mas as subcamadas não. Eu posso ver a visualização crescendo e diminuindo, mas as subcamadas aumentam imediatamente e então permanecem com o novo tamanho maior. Qual é a melhor maneira de redimensionar as subcamadas de uma visualização quando ela é redimensionada? E como faço para torná-los animados da mesma forma com a visualização pai?
Respostas:
1 para resposta № 1Eu precisaria ver mais código para realmente corrigir o problema, no entanto, você pode tentar animar a camada do miniView em vez de sua visualização.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.fromValue = [NSNumber numberWithFloat:0.0];
animation.toValue = [NSNumber numberWithFloat:1.0];
// additional setup...
[miniView.layer layoutIfNeeded];
[miniView.layer addAnimation:animation forKey:@"whateverYouWant"];
Em vez de usar animação UIKit, isso deve ser mais flexível, uma vez que você pegue o jeito.