2014-11-15 3 views
0

У меня небольшая настольная игра, все сделано, за исключением того, чтобы показывать противникам последние ходы.ImageView Animation in Steps

То, что я пытаюсь сделать, это:

Шаг1: Скрыть все части

Шаг2: Animate Перестройки

Step3: Показать существующие части снова

То, что я пытался,

[UIView animateWithDuration:5.00 delay:0.5 
         options:UIViewAnimationOptionCurveEaseOut //4 
        animations:^{ 

         for (int i = 0; i<[_piecePlayer1 count]; i++) { 
         [[_piecePlayer1 objectAtIndex:i] hide]; 
         [[_piecePlayer2 objectAtIndex:i] hide]; 

         } 


        } 
        completion:^(BOOL finished){ 


}]; 

Скрытие сделано таким образом.

-(void)hide{ 

    CATransition *animation = [CATransition animation]; 
    animation.type = kCATransitionFade; 
    animation.duration = 0.4; 
    [self.layer addAnimation:animation forKey:nil]; 

    self.hidden = YES; 
} 

Проблема:

Шаг 1 работает нормально, но если я пропустить шаг 2 и просто пытаюсь показать кусочки в completion block он просто появляется мгновенно, даже я поместил вложенный блок анимации с задержкой.

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

Благодаря danielquokka и специальным благодаря этому один Repeat Animation

ответ

1

Я думаю, что основная проблема в том, что скрытые свойства не анимируемые. Вместо этого используйте свойство alpha, которое можно анимировать. Но я не понимаю, почему вы все-таки используете CAT-переход. Следующий код будет исчезать из частей, на короткое время задержать, и исчезают их обратно в

[UIView animateWithDuration:5.00 
         delay:0 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
         for (int i = 0; i<[_piecePlayer1 count]; i++) { 
          _piecePlayer1[i].alpha = 0.0; 
          _piecePlayer2[i].alpha = 0.0; 
         } 
        } 
        completion:^(BOOL finished){ 
         [UIView animateWithDuration:5.00 
               delay:0.5 
              options:UIViewAnimationOptionCurveEaseIn 
             animations:^{ 
               for (int i = 0; i<[_piecePlayer1 count]; i++) { 
                _piecePlayer1[i].alpha = 1.0; 
                _piecePlayer2[i].alpha = 1.0; 
               } 
              } 
              completion:^(BOOL finished){} 
         }]; 

}]; 
+0

Это работает на самом деле, как я хотел, чтобы все работало,.), Но одна вещь, которая все еще осталось, пользователь может иметь один или больше ходов, но использование цикла for над блоком анимации не работает последовательно, как я могу анимировать движения в последовательности после того, как текущие шары скрыты? Вы можете дать представление, я попробую – user3141985

+0

Я предлагаю иметь способ сделать индивидуальный переход с анимацией внутри него и вернуть его к тому же методу в блоке завершения анимации. Переменная состояния (экземпляра) может определять, к какому шагу она подходит, и вызвать фейд в анимации, когда она будет завершена. – danielquokka

+0

приятно, я постараюсь, поэтому он будет работать с рекурсией! – user3141985