Анимация UIView и его подслоев - PullRequest
4 голосов
/ 04 августа 2010

У меня есть подкласс UIView, который состоит из нескольких слоев (в основном CAShapeLayers с несколькими CATextLayers). У меня проблема в том, что если я анимирую изменение размера UIView с помощью блока анимации (beginAnimations, commitAnimations) и ретранслируем подслои в переопределенном layoutSubviews тогда слои не анимируются с помощью UIView.

Ниже приведен мой код для анимации кадра 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];

Так что проблема в том, что представление правильно анимировано, а подслои - нет. Я могу видеть, как вид растет и уменьшается, но подслои растут сразу, а затем остаются новые большего размера. Каков наилучший способ изменить размер подслоев представления при изменении размера представления? И как мне сделать их одушевленными таким же образом с родительским представлением?

1 Ответ

1 голос
/ 24 августа 2010

Мне нужно увидеть больше кода, чтобы действительно решить проблему, однако вы можете попытаться анимировать слой miniView вместо его вида.

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"];

Вместо использования анимации UIKit она должна быть более гибкой, как только вы ее освоите.

...