Может ли прокрутка управлять анимацией? - PullRequest
0 голосов
/ 08 февраля 2010

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

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

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

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2010

Использование 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];
}
0 голосов
/ 08 февраля 2010
  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;
    

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

...