2013-09-05 2 views
0

Я искал бесконечную анимационную технику для моей анимации загрузки. Пользователь нажимает логин, и в то время как материал JSON заботится о себе, прядильщик вращается, а затем в конечном итоге представляет новый контроллер представления или ошибку входа в систему. Я нашел отличный code snippet от Nate.UIViewAnimation только завершение поворота на 180 градусов

Код определяется по формуле:

// an ivar for your class: 
BOOL animating; 

- (void) spinWithOptions: (UIViewAnimationOptions) options { 
    // this spin completes 360 degrees every 2 seconds 
    [UIView animateWithDuration: 0.5f 
         delay: 0.0f 
         options: options 
        animations: ^{ 
         self.imageToMove.transform = CGAffineTransformRotate(imageToMove.transform, M_PI/2); 
        } 
        completion: ^(BOOL finished) { 
         if (finished) { 
          if (animating) { 
          // if flag still set, keep spinning with constant speed 
          [self spinWithOptions: UIViewAnimationOptionCurveLinear]; 
          } else if (options != UIViewAnimationOptionCurveEaseOut) { 
          // one last spin, with deceleration 
          [self spinWithOptions: UIViewAnimationOptionCurveEaseOut]; 
          } 
         } 
        }]; 
} 

- (void) startSpin { 
    if (!animating) { 
     animating = YES; 
     [self spinWithOptions: UIViewAnimationOptionCurveEaseIn]; 
    } 
} 

- (void) stopSpin { 
    // set the flag to stop spinning after one last 90 degree increment 
    animating = NO; 
} 

Когда пользователь нажимает «Войти» метод startSpin называется, и материал JSON отправляется. В моем методе JSON поста у меня есть это:

if(success == 1) { 
//Present the new view controller 
} 
else { 
[self performSelectorOnMainThread:@selector(stopSpin) withObject:nil waitUntilDone:NO]; 
[self performSelectorOnMainThread:@selector(hideAnimation) withObject:nil waitUntilDone:NO]; 

} 

Этот метод анимация работало большое для страницы загрузки данных я использую позже в моем приложении. Однако для этого приложения он вращается только на 180 градусов, а затем останавливается. Затем следующая страница/ошибка в конечном итоге загружается после промежутка времени неодушевленного изображения. Кто-нибудь знает, почему это происходит? Я не думаю, что это связано с частью контроллера, потому что она перестает вращаться, даже когда логин завершился неудачей (контроллер представления не будет представлен). Звоню startSpin метод по нажатию кнопки с помощью:

[self performSelectorOnMainThread:@selector(showAnimation) withObject:nil waitUntilDone:NO]; 
[self performSelectorOnMainThread:@selector(startSpin) withObject:nil waitUntilDone:NO]; 

Где шоу анимация просто метод, который не-скрывает вид.

Любые мысли оценили.

+0

Где, если угодно, вы называете '-stopSpin'? – Tim

+0

Я вызываю stopSpin, когда успех = 0 - Я добавляю это в настоящее время. У меня есть строка NSLog (@ «Стоп-спина») в моем методе stopSpin, и ни в коем случае это не вызвано, когда логин был успешным и новый контроллер представлен. –

+0

ОК, спасибо. Вы говорите: «В моем методе почты JSON у меня есть это ...» - это то, что в методе * отправлять * запрос JSON или метод/обработчик/обратный вызов, который * получает * ответ? Если вы проверяете успех при отправке, вы можете сделать это слишком рано, так как вы все еще ожидаете ответа JSON, чтобы вернуться. – Tim

ответ

0

В основном вы устанавливаете преобразование для поворота на Pi/2, 180 градусов, а во втором раунде вы устанавливаете его на одно значение. Установка того же значения, что и раньше, не будет анимировать его. Вы не можете найти способ добавить еще 180 градусов к преобразованию вращения.

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