2014-05-28 3 views
0

Кажется странным, что я не мог найти ответа на все это по сети, но кажется, что если вы хотите переместить 6 UIViews в то же время с другой скоростью, вы не можете сделать что.Попытка выполнить несколько анимаций сразу

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

Там нет никакого способа, чтобы переместить 6-7-8 UIViews одновременно с разной длительности?

1.

for(UIButton *button in buttons) 
{ 

    float r= arc4random()%10; 
    float t =0.1+ 1.0/r; 
[UIView beginAnimations:@"Anim0" context:nil]; 
[UIView setAnimationDuration:t]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:button cache:YES]; 

CGRect newframe=button.frame; 
newframe.origin.y=0; 
button.frame=newframe; 

[UIView commitAnimations]; 

} 

2.

for(UIButton *button in buttons) 
    { 
     int random=arc4random()%10; 
     float time=0.5+ 1/(float)random; 
     CGRect newframe=button.frame; 
     newframe.origin.y=0; 
     [UIView transitionWithView:button 
          duration:time 
          options:UIViewAnimationOptionCurveEaseInOut 
         animations:^{ 
          button.frame=newframe; 
         } 
         completion:nil]; 
    } 

ответ

1

Вы должны ограничить генератор случайных чисел.

Ваша функция ...

arc4random() % 10; 

иногда возвращают 0.

Затем проходит это в ...

float time = 0.5 + 1/random; 

Сделает time = inf.

Вы можете видеть это, выбирая значения времени.

Время инфляции сделает кнопку неживой.

+0

, пожалуйста, поверьте, я добавляю 1 к arc4random()% 10; , и проблема все еще возникает. я не вру . – Curnelious

+0

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

+0

Я написал небольшой проект с 9 кнопками и имел проблему с некоторыми кнопками, которые не оживляют. Но не все время. Когда я зарегистрировал время, это была проблема. Пожалуйста, покажите точный код, который не соответствует вашему вопросу. Вы не должны редактировать код перед вставкой в ​​вопрос. – Fogmeister

0

Конечно, это возможно. Проблема в том, что вы отправляете неправильное сообщение. Основываясь на втором фрагменте, это пример того, как это можно сделать:

for (UIButton *button in self.buttons){ 

    int random = arc4random()%10; 
    float time = 0.5 + 1/(float)random; 
    CGRect newframe = button.frame; 
    newframe.origin.y = 0; 

    [UIView animateWithDuration:time 
          delay:0.0f 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         button.frame = newframe; 
        } completion:^(BOOL finished) { 
         // The animation have finished 
        }]; 
} 
+0

Вы пробовали свой код? попробуйте, и вы увидите, что происходит именно то, что я описал в своем вопросе. не спешите думать, что я не пробовал то, что вы здесь показываете. – Curnelious

+0

@Curnelious Have _you_ попробовал? Потому что я, конечно, сделал это, прежде чем публиковать его ... Спасибо за downvote btw – Alladinian

+0

ДА Я попробовал это сейчас, ЕГО НЕ РАБОТАЕТ! Лишь немногие из них движутся, а не все из них, даже если я вижу, что цикл for перечислил все из них. – Curnelious

Смежные вопросы