문제

내 스크롤보기의 현재보기에 대한 현재 날짜를 표시하는 uilabel이 있습니다. 이보기가 왼쪽으로 (왼쪽 페이지로) 스크롤하면이 레이블이 전날까지 변경되기를 원합니다.

스포트라이트 페이지로 스크롤 할 때 스프링 보드의 페이딩 효과를 참조하여 사용합니다. 나는 이것이 비슷하다고 생각하지만 그것을 구현하는 방법을 모른다!

코드를 어디에 넣습니까? 2 개의 다른 uilabel 또는 coreanimation을 사용해야합니까? 날짜는 언제 변경합니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

  1. 당신의 scrollViewDidScroll: 위임 방법, 스크롤보기가 있는지 확인하십시오 contentOffset 사용자가 다른 페이지로 스크롤했음을 나타냅니다.
  2. 그렇다면 레이블의 텍스트를 새 날짜로 변경하십시오. 아직 애니메이션하지는 않지만 애니메이션을 시도하기 전에이 작업을 수행하십시오.
  3. 애니메이션의 경우 a를 추가하십시오 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;
    

이 효과는 스프링 보드 아이콘의 페이딩과 약간 다르지만 (스포트라이트 페이지로 더 스크롤 할 때 지속적으로 페이드가되기 때문에) 내 접근 방식은 응용 프로그램에 더 적합하다고 생각합니다. 스프링 보드 효과를 모방하려면 실제로 두 개의 개별 레이블 (동일한 프레임 포함)을 사용하고 스크롤보기의 ContentOffset이 변경 될 때 불투명도 값을 변경해야합니다.

다른 팁

두 개의 레이블이있는 핵심 애니메이션을 사용하면 잘 작동합니다. 핵심 애니메이션 계층의 속성을 변경하면 기본적으로 원활한 전환이 발생하므로이를 유리하게 사용할 수 있습니다. 예를 들어:

- (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