스크롤링이 애니메이션을 제어 할 수 있습니까?
-
19-09-2019 - |
문제
내 스크롤보기의 현재보기에 대한 현재 날짜를 표시하는 uilabel이 있습니다. 이보기가 왼쪽으로 (왼쪽 페이지로) 스크롤하면이 레이블이 전날까지 변경되기를 원합니다.
스포트라이트 페이지로 스크롤 할 때 스프링 보드의 페이딩 효과를 참조하여 사용합니다. 나는 이것이 비슷하다고 생각하지만 그것을 구현하는 방법을 모른다!
코드를 어디에 넣습니까? 2 개의 다른 uilabel 또는 coreanimation을 사용해야합니까? 날짜는 언제 변경합니까?
미리 감사드립니다!
해결책
- 당신의
scrollViewDidScroll:
위임 방법, 스크롤보기가 있는지 확인하십시오contentOffset
사용자가 다른 페이지로 스크롤했음을 나타냅니다. - 그렇다면 레이블의 텍스트를 새 날짜로 변경하십시오. 아직 애니메이션하지는 않지만 애니메이션을 시도하기 전에이 작업을 수행하십시오.
애니메이션의 경우 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];
}
제휴하지 않습니다 StackOverflow