Эффект слайда при загрузке iPhone

Я хотел бы добиться этого, когда вы запрашиваете что-то в моем приложении (например, нажатую кнопку или что-то еще), я хотел бы, чтобы он отображался в виде небольшого прямоугольника с надписью «загрузка ...», а когда загрузка завершена, он исчезает с «эффектом слайда». ". Я сделал простые мокапы, чтобы хорошо описать то, чего я пытаюсь достичь. У тебя есть какой-нибудь намек для меня? Спасибо.

введите здесь описание изображения

ПРИМЕЧАНИЕ. Мне не нужен эффект обновления по запросу (представление загрузки отображается без прокрутки экрана, оно появляется, например, при отправке комментария)

ОБНОВЛЕНИЕ:

Я пробовал код Cirrostratus:

- (IBAction)displayLoadingScreen:(id)sender
{
    NSLog(@"pressed");
    UIView *loadingView = [[UIView alloc] init];
    loadingView.frame = CGRectMake(0,-40,320,40);
    [loadingView setBackgroundColor:[UIColor blueColor]];
    [self.view addSubview:loadingView];
    //animate in within some method called when loading starts
    [UIView animateWithDuration:1.0
                     animations:^{ 
                         loadingView.frame = CGRectMake(0,0,320,40);
                     } 
                     completion:^(BOOL finished) {
                     }];
    for (int i = 0; i < 10000; i++) {
        NSLog(@"%d", i);
    }
    //animate out within some method called when loading ends
    [UIView animateWithDuration:1.0
                     animations:^{ 
                         loadingView.frame = CGRectMake(0,-40,320,40);
                     } 
                     completion:^(BOOL finished){


                     }];
}

Почему загрузочное представление скользит после цикла for? Если вы попробуете, прежде чем он напечатает цикл for, а после выполнит две анимации. Идеи?

ОБНОВЛЕНИЕ 2

- (void)stopLoading {
    [UIView animateWithDuration:1.0
                     animations:^{ 
                         loadingView.frame = CGRectMake(0,-40,320,40);
                     } 
                     completion:^(BOOL finished){
                     }];
}

- (void)startLoading {
    loadingView.frame = CGRectMake(0,-40,320,40);
    [loadingView setBackgroundColor:[UIColor blueColor]];
    [self.view addSubview:loadingView];
    //animate in within some method called when loading starts
    [UIView animateWithDuration:1.0
                     animations:^{ 
                         loadingView.frame = CGRectMake(0,0,320,40);
                     } 
                     completion:^(BOOL finished) {
                     }];
    sleep(5);
    [self stopLoading];
}

- (IBAction)displayLoadingScreen:(id)sender
{
    NSLog(@"button pressed");
    [self startLoading];
}

person Fred Collins    schedule 03.11.2011    source источник
comment
Попробуйте прочитать класс UIAnimation (и использовать фреймворк QuartzCore).   -  person Raptor    schedule 03.11.2011
comment
Или, если вы хотите использовать функцию «Слайд вниз для обновления», как это сделал Facebook, рассмотрите возможность использования EGOTableViewPullRefresh.   -  person Raptor    schedule 03.11.2011


Ответы (3)


Что бы я сделал, так это добавил представление перед другими вашими представлениями с желаемым дизайном загрузки.

Затем, когда загрузка будет завершена (используйте уведомление или просто вызовите функцию представления), сдвиньте его вверх с такой анимацией:

[UIView animateWithDuration:0.3
                              delay:0
                            options:UIViewAnimationOptionAllowUserInteraction
                         animations:^{
                             //change the frame to make the view go out of the screen
                         }
                         completion:^(BOOL finished){
                             //do whatever you want with the view (release it for instance)
                         }];
person MatLecu    schedule 03.11.2011

вы можете сделать это с помощью счетчика, иначе вы просто просматриваете и устанавливаете анимацию с ее координатой, когда вы нажимаете на любой объект, он всплывает в вашем представлении, и после завершения его загрузки вы должны установить «-» координату (кадр) для ваш всплывающий вид хопа, он поможет вам......

person viral shah    schedule 03.11.2011

person    schedule
comment
В моем ответе я сказал вам поместить эти анимации в отдельные методы, один из которых будет вызываться при запуске загрузки, а другой - при завершении загрузки. Циклы выполняются до завершения анимации, потому что выполнение анимации занимает 1 секунду, что выполняется, пока продолжается другой код. Итак, подведем итог: не используйте обе анимации в одном методе. Позвоните одному, когда загрузка действительно должна начаться, позвоните другому, когда загрузка действительно закончится, и все будет хорошо. - person james_womack; 03.11.2011
comment
Спасибо за ваше терпение, но у меня это не сработало. Смотрите мое новое обновление. Почему первым выполняется оператор sleep, а не мой первый слайд в анимации? - person Fred Collins; 03.11.2011
comment
Если бы вы на самом деле загружали данные, это отличалось бы от использования сна. Вы никогда не должны использовать сон в программе iPhone. Выключите сон и сделайте следующее: [UIView animateWithDuration:1.0 animations:^{ loadingView.frame = CGRectMake(0,0,320,40); } завершение: ^ (BOOL завершено) { [UIView animateWithDuration: 1.0 анимации: ^ { loadingView.frame = CGRectMake (0,-40,320,40); } завершение:^(BOOL завершено){ }]; }]; - person james_womack; 03.11.2011
comment
Я использовал sleep для тестирования. Анимация работает нормально, но я бы хотел, чтобы представление скользило, оставалось на несколько секунд (на время запроса), а когда запрос завершен, оно выскальзывало. Идеи? - person Fred Collins; 03.11.2011