어떤 이유로 textColor에 애니메이션을 적용하려고하면 작동하지 않습니다. textColor가 갑자기 A에서 B로 바뀝니다. 애니메이션을 적용 할 수 있습니까? 빨강에서 검정으로 전환 할 수 있습니까?
어떤 이유로 textColor에 애니메이션을 적용하려고하면 작동하지 않습니다. textColor가 갑자기 A에서 B로 바뀝니다. 애니메이션을 적용 할 수 있습니까? 빨강에서 검정으로 전환 할 수 있습니까?
답변:
이 답변은 구식이며 원래 질문에 대한 좋은 해결책이 아닙니다. 아래 @strange의 답변이 훨씬 더 좋으며이 답변 대신 사용해야합니다. https://stackoverflow.com/a/20892927/76559
// 아래의 이전 답변
textColor
난 당신이 간단한 UIView의 애니메이션 블록과 그것을 할 수 있다고 생각하지 않도록 속성은 워드 프로세서에서 애니메이션로서 지정되지 않은 ...
이것은 아마도 NSTimer
몇 밀리 초마다 발화 하여 매우 조잡하게 수행 될 수 있으며 매번 색상을 점차적으로 설정할 수 있습니다.
시작 색상에서 종료 색상으로 이동하는 사전 설정된 색상 값의 배열 또는 다른 컨테이너가 필요하기 때문에 조잡하다고 말합니다. 핵심 애니메이션 등을 사용하여이 작업을 수행 할 수있는 방법이 있다고 확신합니다. 그것이 무엇인지 모릅니다.
CADisplayLink
대신 을 사용해야 NSTimer
합니다. 약 13:00에 WWDC 2014 세션 236 : 인터럽트 및 반응 형 상호 작용 구축을 참조하십시오 .
대신 다음과 같이 개체 자체에 크로스 페이드 전환을 사용해 보았 으면 한 색상에서 다른 색상으로 멋진 페이드 인 페이드 아웃 효과를 얻을 수 있습니다.
목표 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에 대한 적절한 지원이 없으며 NSTimers는 느립니다 (코드가 너무 많음). 위의 전환 애니메이션은 트릭을 수행하며 체인 애니메이션에서도 사용할 수 있습니다. 나는 같은 문제가 있었고 이미 위의 해결책을 시도했지만이 간단한 코드가 대신 놀라운 일을합니다.
UIView.transitionWithView(creditsLabel, duration: 0.3, options: .TransitionCrossDissolve, animations: { self.creditsLabel.textColor = UIColor.redColor() }, completion: nil)
Swift 4 솔루션 :
UIView.transition(with: yourLabel, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.yourLabel.textColor = .red
}, completion: nil)
UILabel
대한 인스턴스가있는 경우에만 작동합니다 with
. 만약 당신이 뭔가를 transition(with: outerView.label…)
하고 그것을 안에 넣으려고하면, 그것은 조용히 실패 할 것입니다.
options: .easeInOut
변경하여 .transitionCrossDissolve
일했습니다.
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) { }];
@ Strange 의 답변에 감사드립니다. Swift 5, Xcode 11에서 약간의 구문 변경으로 완벽하게 작동합니다. 여러 UILabels의 텍스트 색상을 애니메이션으로 만들었습니다. 이것이 귀하의 경우라면 이것을 시도하십시오.
for label in [label1, label2, ...] as [UILabel] { // loop through a @IBOutlet UILabel array
UIView.transition(with: label, duration: 0.3, options: .transitionCrossDissolve, animations: {
label.textColor = .label
}, completion: nil)
}