2010-02-08 3 views
0

У меня есть UILabel, который отображает текущую дату текущего вида моего вида прокрутки. Когда я просматриваю это представление влево (на левые страницы), мне бы хотелось, чтобы этот ярлык изменился на день раньше, с эффектом пересечения между двумя датами.Может ли прокрутка управлять анимацией?

Я беру в качестве ссылки эффект затухания трамплина, когда вы переходите на страницу Spotlight. Я думаю, что это похоже, но я понятия не имею, как его реализовать!

Где я могу поместить код, нужно ли использовать 2 разных UILabel или, возможно, CoreAnimation? Когда я меняю дату?

Заранее благодарен!

ответ

0
  1. В вашем методе scrollViewDidScroll: делегата, проверьте, если вид свитка contentOffset указывает, что пользователь прокрутил на другую страницу.
  2. Если это так, измените текст ярлыка на новую дату. Он еще не оживит, но сделайте это, прежде чем пытаться анимацию.
  3. Для анимации, добавьте CATransition к слою лейбла и настроить его по своему вкусу:

    // Create a transition animation and add it to the label's layer: 
    CATransition *transition = [CATransition animation]; 
    transition.type = kCATransitionFade; 
    transition.duration = 0.25; 
    [self.dateLabel.layer addAnimation:transition forKey:@"textTransition"]; 
    // Change the label's text as before: 
    self.dateLabel.text = newDateString; 
    

Этот эффект немного отличается от выцветания трамплине иконок (так как те исчезают непрерывно когда вы прокручиваете страницу Spotlight), но я думаю, что мой подход более подходит для вашего приложения. Чтобы эмулировать эффект Springboard, вы действительно должны использовать две отдельные метки (с одним и тем же фреймом) и изменять их значения непрозрачности по мере изменения содержимого contentOffset вида прокрутки.

0

Использование Core Animation с двумя ярлыками будет работать нормально. Изменение свойства уровня Core Animation приводит к плавному переходу по умолчанию, поэтому вы можете использовать его в своих интересах. Например:

- (void)crossfadeDateLabels 
{ 
    date1Label.layer.opacity = 0.0f; 
    date2Label.layer.opacity = 1.0f; 
} 

Или вы можете использовать явную модель анимации, если вы хотите большего контроля:

- (void)crossfadeDateLabels 
{ 
    CABasicAnimation *date1Anim = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
    date1Anim.duration = 1.0f; 
    date1Anim.fromValue = [NSNumber numberWithFloat:1.0f]; 
    date1Anim.toValue = [NSNumber numberWithFloat:0.0f] 

    // Do something similar for date2Anim... 

    [date1Label.layer addAnimation:date1Anim forKey:nil]; 
    [date2Label.layer addAnimation:date2Anim forkey:nil]; 
} 

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

  • Нет связанных вопросов^_^