Я искал бесконечную анимационную технику для моей анимации загрузки. Пользователь нажимает логин, и в то время как материал 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];
Где шоу анимация просто метод, который не-скрывает вид.
Любые мысли оценили.
Где, если угодно, вы называете '-stopSpin'? – Tim
Я вызываю stopSpin, когда успех = 0 - Я добавляю это в настоящее время. У меня есть строка NSLog (@ «Стоп-спина») в моем методе stopSpin, и ни в коем случае это не вызвано, когда логин был успешным и новый контроллер представлен. –
ОК, спасибо. Вы говорите: «В моем методе почты JSON у меня есть это ...» - это то, что в методе * отправлять * запрос JSON или метод/обработчик/обратный вызов, который * получает * ответ? Если вы проверяете успех при отправке, вы можете сделать это слишком рано, так как вы все еще ожидаете ответа JSON, чтобы вернуться. – Tim