2014-01-28 2 views
1

Я хочу сделать несколько уведомлений с продолжительностью анимации. Эти коробки будут скользить вниз (сверху) до тех пор, пока они не будут закрывать панель состояния и навигационную панель (0,3 с), быть статическими и видимыми в течение примерно 2,4 секунд, а затем сдвигать назад с экрана (0,3 с).Продолжительность анимации на iOS

Я грубо сделать их, как показано ниже:

notificationLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 64)]; 
[UIView animateWithDuration:0.3 delay:2.4 options:UIViewAnimationOptionCurveLinear animations:^{notificationLabel.frame = CGRectMake(0,-64, 320, 64);} completion:nil]; 

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

Во-вторых, чтобы показать и скрыть метку уведомления не точное время. Как я могу изменить свой код для этих проблем?

Пожалуйста, дайте мне знать. Благодарю.

ответ

1

Как я отображать уведомление на верхней строке состояния навигации \, добавляя его к keyWindow так:

[[UIApplication sharedApplication].keyWindow addSubview:notificationLabel]; 

Тогда для того, чтобы анимационного это так, как вы описали:

notificationLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, -64, 320, 64)]; 
[UIView animateWithDuration:0.3 animations:^{ 
    notificationLabel.frame = CGRectMake(0, 0, 320, 64); 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:0.3 delay:2.4 options:UIViewAnimationOptionCurveLinear animations:^{ 
     notificationLabel.frame = CGRectMake(0, -64, 320, 64); 
    } completion:nil]; 
}]; 

Это не очень изящно, но уже поздно, и это то, что я мог бы придумать :)

1

Что я предлагаю использовать с ключевыми кадрами. Это означает, что вы добавляете анимации последовательно с относительным временем начала. Ниже приводится небольшой пример:

//Create your label above the screen outside of the field of view. 
    notificationLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, -64, 320, 64)]; 

//Add your subview to the window here. Whether its adding it to a subview or to the main window 
// ex. [self.view addSubview:notificationLabel]; 

[UIView animateKeyframesWithDuration:3.0f delay:0.0f options:UIViewKeyframeAnimationOptionAllowUserInteraction animations:^{ 
    [UIView addKeyframeWithRelativeStartTime:0.0f relativeDuration:0.3f animations:^{ 
     //Animate the sliding down of your notification here at 0.0 seconds and it lasts 0.3 seconds 
     [notificationLabel setFrame:CGRectMake(0,0, 320, 64)]; 
    }]; 
    [UIView addKeyframeWithRelativeStartTime:0.3f relativeDuration:2.4f animations:^{ 
     //Animate the sliding down of your notification here at 0.3 seconds and it lasts 2.4 seconds 
     //really, you'll do nothing here. so this frame is optional. 
    }]; 
    [UIView addKeyframeWithRelativeStartTime:2.7f relativeDuration:0.3f animations:^{ 
     //Animate the sliding up of your notification here at 0.0 seconds and it lasts 0.3 seconds 
     [notificationLabel setFrame:CGRectMake(0,-64, 320, 64)]; 
    }]; 
} completion:nil]; 
Смежные вопросы