UIView начинают анимации с подвидом - PullRequest
9 голосов
/ 15 мая 2009

У меня есть приятная и простая анимация «увеличения» для вида, которая начинается с точки и анимируется до полного размера экрана:

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:1.0];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        myView.frame = CGRectMake(0,0,320,480);
        myView.transform = CGAffineTransformIdentity;  
        [UIView commitAnimations];

Пока все хорошо :-)

Проблема в том, что когда я добавляю подпредставления в myView, к моему удивлению, они не следуют схеме анимации своего суперпредставления!?!?

Btw. подпредставления в настоящее время добавляются как обычно в initWithFrame MyView. Я попытался установить их свойство transform в CGAffineTransformIdentity, но это не помогло.

Итак, что нужно сделать, чтобы подпрограмма myView также могла анимироваться в режиме «увеличения» вместе с его суперпредставлением?

Заранее спасибо!
/ John

Ответы [ 2 ]

15 голосов
/ 24 августа 2009

Я просто столкнулся с той же проблемой, и решение оказалось на удивление легким. В то время как изменение размера кадра влияет только на текущий вид, а не на подпредставления (как вы заметили), свойство transform также применяется к подпредставлениям.

Я пытаюсь сделать то, что вы делаете, в обратном направлении (иметь подпредставление, которое при отображении «падает» в верхнюю часть существующего вида, а не масштабируется от центра). Этот код работает для меня:

self.transform = CGAffineTransformMakeScale(2,2);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.transform = CGAffineTransformMakeScale(1,1);
self.alpha = 1.0;
[UIView commitAnimations];

Попробуйте установить self.transform в CGAffineTransformMakeScale (0,0) перед началом анимации и установите его обратно в (1,1) перед фиксацией. Ни в коем случае не изменяйте фрейм - оставьте его в том размере, который вы хотите видеть после завершения анимации.

0 голосов
/ 12 октября 2012

Вы всегда можете использовать авторазмер в конструкторе интерфейсов. Таким образом, вы можете указать левую / границу, которую вы не хотите менять, и ось, вдоль которой вы хотите изменить размер конкретного подвида.

Autosizing feature

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...