UIView анимация только оживляет некоторые вещи, которые я прошу это - PullRequest
0 голосов
/ 24 марта 2010

У меня есть ряд (скажем) блоков на экране подряд, все подпредставления моего основного вида. Каждый является UIView. Я хочу сдвинуть их все влево и по-новому взглянуть на экран справа в слогане. Вот что я делаю:

// First add a dummy view offscreen
UIView * stagingView = /* make this view, which sets up its width/height */
CGRect frame = [stagingView frame];
frame.origin.x = /* just off the right side of the screen */;
[stagingView setFrame:frame];
[self addSubview:stagingView];

А затем я настроил анимации в одном блоке для всех моих подпредставлений (включая тот, который я только что добавил):

[UIView beginAnimations:@"shiftLeft" context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(_animationDidStop:context:)];        
[UIView setAnimationDuration:0.3];
for (UIView * view in [self subviews]) {
    CGRect frame = [view frame];
    frame.origin.x -= (frame.size.width + viewPadding);
    [view setFrame:frame];
}
[UIView commitAnimations];        

Вот то, что я ожидаю: (три) вида, уже находящиеся на экране, сдвигаются влево, а недавно созданный вид одновременно появляется справа.

Вот что происходит: вновь созданный вид анимируется точно так, как ожидалось, а виды, уже находящиеся на экране, вообще не двигаются! (Или, возможно, они прыгают без анимации в свои конечные местоположения).

И! Если я закомментирую весь процесс создания нового подпредставления за кадром ... то, что на экране делает , правильно анимирует!

А?

ОБНОВЛЕНИЕ : После еще нескольких осмотров я обнаружил нечто удивительное: я могу решить эту проблему, вернув свой пользовательский подкласс layoutSubviews, не выполняя никакой работы, если он вызывается между временем анимации настроить, и время, которое он завершает. Этот метод должен сделать некоторую работу, чтобы настроить положение этих подпредставлений во время изменения ориентации. Но я не очень понимаю взаимодействие анимации с этим методом - я думаю, что он будет вызван в конце концов, возможно, в конце, что имело бы смысл и которое по сути должно быть неактивным после анимации. Может кто-нибудь объяснить мне взаимодействие? Кажется, я близок к просветлению, но еще не совсем там. Спасибо!

1 Ответ

1 голос
/ 24 марта 2010

Как и в случае с комментаторами, мне любопытно, почему вы бы позвонили

[self stagingView];

Я думаю, это потому, что вы пытаетесь вызвать drawRect :. Мне также интересно, почему вы не добавили это как подпредставление в коде примера, хотя я предполагаю, что вы сделали это где-то

У меня есть 2 вещи, которые могут помочь:

1.Не анимируйте «коробки» индивидуально. Создайте для них представление контейнера, а затем просто анимируйте представление контейнера. Простой!

OR

2.Не полагайтесь на [просмотр подпредставлений] для правильной работы. Сохраните свой собственный массив ящиков, которые вы хотите переместить (ивар), и переберите их вместо этого.

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