Вопрос

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

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

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

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

Это было полезно?

Решение

  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 представления прокрутки.

Другие советы

Использование 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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top