UILabel의 textColor 속성에 애니메이션을 적용하는 방법은 무엇입니까?
어떤 이유로 textColor에 애니메이션을 적용하려고하면 작동하지 않습니다. textColor가 갑자기 A에서 B로 바뀝니다. 애니메이션을 적용 할 수 있습니까? 빨강에서 검정으로 전환 할 수 있습니까?
이 답변은 구식이며 원래 질문에 대한 좋은 해결책이 아닙니다. 아래 @strange의 답변이 훨씬 더 좋으며이 답변 대신 사용해야합니다. https://stackoverflow.com/a/20892927/76559
// 아래의 이전 답변
이 textColor
속성은 문서에서 애니메이션 가능으로 지정되지 않았으므로 간단한 UIView 애니메이션 블록으로는 할 수 없다고 생각합니다.
이것은 아마도 NSTimer
몇 밀리 초마다 발화 하여 매우 조잡하게 수행 될 수 있으며 매번 색상을 점차적으로 설정할 수 있습니다.
시작 색상에서 종료 색상으로 이동하는 사전 설정된 색상 값의 배열 또는 다른 컨테이너가 필요하기 때문에 이것은 조잡하다고 말합니다. 핵심 애니메이션 등을 사용하여이 작업을 수행 할 수있는 방법이 있다고 확신합니다. 그것이 무엇인지 모릅니다.
대신 다음과 같이 오브젝트 자체에 크로스 페이드 전환을 사용해 보았 으면 한 색상에서 다른 색상으로 멋진 페이드 인 페이드 아웃 효과를 얻을 수 있습니다.
목표 C
[UIView transitionWithView:myLabel duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
myLabel.textColor = NEW_COLOR;
} completion:^(BOOL finished) {
}];
빠른
UIView.transitionWithView(creditsLabel, duration: 0.25, options: .TransitionCrossDissolve, animations: {
self.creditsLabel.textColor = UIColor.redColor()
},
completion: nil)
이것은 다양한 이유로 NSTimers, CATextLayers 등을 사용하는 것보다 낫습니다. CATextLayer는 텍스트 커닝 또는 NSAttributedText에 대한 적절한 지원이 없으며 NSTimer는 느립니다 (코드가 너무 많음). 위의 전환 애니메이션은 트릭을 수행하며 체인 애니메이션에서도 사용할 수 있습니다. 나는 같은 문제가 있었고 이미 위의 해결책을 시도했지만이 간단한 코드가 대신 놀라운 일을합니다.
Swift 4 솔루션 :
UIView.transition(with: yourLabel, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.yourLabel.textColor = .red
}, completion: nil)
textColor가 애니메이션 가능하지 않은 이유는 UILabel이 CATextLayer 대신 일반 CALayer를 사용하기 때문입니다.
textColor를 애니메이션 가능하게 만들기 위해 (텍스트, 글꼴 등) UILabel을 하위 클래스로 만들어 CATextLayer를 사용할 수 있습니다.
이것은 꽤 많은 일이지만 운 좋게도 이미 해냈습니다 :-)
이 기사 에서 UILabel에 대한 완전한 설명 + 드롭 인 오픈 소스 대체를 찾을 수 있습니다.
UILabel의 다른 인스턴스 또는 textColor가있는 모든 인스턴스를 만든 다음 두 인스턴스 (이전 textColor 및 새 textColor가있는 인스턴스)간에 애니메이션을 적용 할 수 있습니다.
이것은 나를 위해 일한 유일한 것입니다.
let changeColor = CATransition()
changeColor.duration = 1
CATransaction.begin()
CATransaction.setCompletionBlock {
selected.label.layer.addAnimation(changeColor, forKey: nil)
selected.label.textColor = .blackColor()
}
selected.nameLabel.textColor = .redColor()
CATransaction.commit()
다음은 레이블 텍스트 색상을 애니메이션하는 코드입니다. 중요한 부분은 clearColor에 텍스트 색상을 설정하는 것입니다 애니메이션 전에
label.textColor = [UIColor clearColor];
[UIView transitionWithView:label duration:duration/4 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
label.textColor = self.highlightedCellPrimaryTextColor;
} completion:^(BOOL finished) { }];
레이블 아래에 UIView를 배치하고 불투명도를 애니메이션하는 것이 매우 쉽습니다. 해당보기에 레이블을 추가해야합니다. 리소스 소비 관점에서 볼 때 좋은 솔루션은 아니지만 매우 간단합니다.
업데이트 된 스위프트 3.0
@budidino 댓글에서 방금 변경했습니다.
UIView.transition(with: my.label, duration: 0.3, options: .transitionCrossDissolve, animations: { my.label.textColor = .black }, completion: nil)
참고URL : https://stackoverflow.com/questions/2426614/how-to-animate-the-textcolor-property-of-an-uilabel
'development' 카테고리의 다른 글
한 줄에 하나의 항목이있는 두 텍스트 파일의 차이점 찾기 (0) | 2020.10.15 |
---|---|
동적이지만 정사각형 레이아웃을 수행하는 간단한 방법 (0) | 2020.10.15 |
지연된 함수 호출 (0) | 2020.10.15 |
Scala에서 List에서 고유 한 항목을 찾는 방법 (0) | 2020.10.15 |
ImageButton의 표준 배경 이미지를 제거하는 방법은 무엇입니까? (0) | 2020.10.15 |