두 숫자 사이에 UI 레이블 텍스트를 애니메이션화하시겠습니까?
iPhone과 Mac 프로그래밍(이전에 Windows용으로 개발됨)을 처음 접하는데 질문이 있습니다.
어떻게 애니메이션을 만들 수 있습니까?text
재산UILabel
두 숫자 사이, 예를 들어 이지아웃 스타일의 5부터 80까지?로 가능합니까?CoreAnimation
한 시간 동안 구글에서 검색을 해봤지만, 문제를 해결할 수 있는 것을 찾지 못했습니다.내가 원하는 것:사용자에게 간단한 게임을 위한 돈을 애니메이션으로 만듭니다.애니메이션 없이 50에서 100으로 넘어갈 때는 별로 좋아 보이지 않습니다.
그걸 어떻게 하는지 아는 사람?
감사합니다!
자동 전환을 사용할 수 있습니다.완벽하게 잘 작동합니다.
// Add transition (must be called after myLabel has been displayed)
CATransition *animation = [CATransition animation];
animation.duration = 1.0;
animation.type = kCATransitionFade;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[myLabel.layer addAnimation:animation forKey:@"changeTextTransition"];
// Change the text
myLabel.text = newText;
이 코드는 myLabel이 이미 표시된 경우에 작동합니다.그렇지 않으면 myLabel.layer가 0이 되고 애니메이션이 개체에 추가되지 않습니다.
스위프트 4에서는 다음과 같습니다.
let animation: CATransition = CATransition()
animation.duration = 1.0
animation.type = kCATransitionFade
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
myLabel.layer.add(animation, forKey: "changeTextTransition")
잘 작동합니다!
목표-C
[UIView transitionWithView:self.label
duration:.5f
options:UIViewAnimationOptionCurveEaseInOut |
UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.label.text = rand() % 2 ? @"111!" : @"42";
} completion:nil];
스위프트 2
UIView.transitionWithView(label, duration: 0.25, options: [.CurveEaseInOut, .TransitionCrossDissolve], animations: {
self.label.text = (arc4random() % 2 == 0) ? "111" : "222"
}, completion: nil)
스위프트 3, 4, 5
UIView.transition(with: label, duration: 0.25, options: [.curveEaseInOut, .transitionCrossDissolve], animations: {
self.label.text = (arc4random() % 2 == 0) ? "111" : "222"
}, completion: nil)
저는 PRTween이라는 다양한 타이밍 기능을 가진 값을 조정하는 훌륭한 엔진을 발견했습니다.클래스를 설치하고 다음 행을 따라 코드를 만듭니다.
- (IBAction)tweenValue
{
[[PRTween sharedInstance] removeTweenOperation:activeTweenOperation];
PRTweenPeriod *period = [PRTweenPeriod periodWithStartValue:0.0 endValue:100.0 duration:1.0];
activeTweenOperation = [[PRTween sharedInstance] addTweenPeriod:period
target:self
selector:@selector(update:)
timingFunction:&PRTweenTimingFunctionCircOut];
}
- (void)update:(PRTweenPeriod*)period
{
self.animatingView.center = CGPointMake(period.tweenedValue + 100.0, 200.0);
self.valueLabel.text = [NSString stringWithFormat:@"%.2f", period.tweenedValue];
}
저한테는 아주 효과가 있어요.:)
새 숫자가 이전 숫자를 밀어내는 것과 함께 위와 아래로 카운트하기를 원하는 경우(티커 등):
let animation = CATransition()
animation.removedOnCompletion = true
animation.duration = 0.2
animation.type = kCATransitionPush
animation.subtype = newValue > value ? kCATransitionFromTop : kCATransitionFromBottom
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
valueLabel.layer.addAnimation(animation, forKey:"changeTextTransition")
Swift 2.0에서는 다음을 사용합니다.UIView.transitionWithView()
방법:
UIView.transitionWithView(self.payPeriodSummaryLabel,
duration: 0.2,
options: [.CurveEaseInOut, .TransitionCrossDissolve],
animations: { () -> Void in
self.label.text = "your text value"
}, completion: nil)
또 다른 간단한 대안
extension UILabel {
func countAnimation(upto: Double) {
let from: Double = text?.replace(string: ",", replacement: ".").components(separatedBy: CharacterSet.init(charactersIn: "-0123456789.").inverted).first.flatMap { Double($0) } ?? 0.0
let steps: Int = 20
let duration = 0.350
let rate = duration / Double(steps)
let diff = upto - from
for i in 0...steps {
DispatchQueue.main.asyncAfter(deadline: .now() + rate * Double(i)) {
self.text = "\(from + diff * (Double(i) / Double(steps)))"
}
}
}
}
언급URL : https://stackoverflow.com/questions/5301305/animate-uilabel-text-between-two-numbers
'source' 카테고리의 다른 글
Angular Event Emitter Error: 0개의 유형 인수가 필요하지만 1개를 받았습니다. (0) | 2023.08.13 |
---|---|
ResultSetExtractor와 Rowmapper의 차이점은 무엇입니까? (0) | 2023.08.08 |
Excel VBA에서 사용자 정의 워크시트 함수 생성 (0) | 2023.08.08 |
텍스트 상자에서 "Enter" 키를 눌렀을 때 HTML 버튼을 트리거하려면 어떻게 해야 합니까? (0) | 2023.08.08 |
Angular2 라우터 오류: 'HomePage'를 로드할 기본 콘센트를 찾을 수 없습니다. (0) | 2023.08.08 |