我的代码中有动画。如下
if (progressanimation != nil) {
[progressLayer removeAnimationForKey:@"strokeEnd"];
}
progressanimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
progressanimation.fromValue = [NSNumber numberWithFloat:0.0f];
progressanimation.toValue = [NSNumber numberWithFloat:1.0f];
progressanimation.duration = 10.0;
progressanimation.delegate = self;
progressanimation.removedOnCompletion = NO;
progressanimation.additive = YES;
progressanimation.fillMode = kCAFillModeForwards;
[progressLayer addAnimation:progressanimation forKey:@"strokeEnd"];
此进度动画将在10秒内完成。我想在一个标签上显示倒数。但是,如果我使用Timer,它的启动速度比动画慢。
这就是我尝试使用Timer的方法,在方法countDown中,我正在改变标签的秒数。
timer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)(1.0) target:self selector:@selector(countDown) userInfo:nil repeats:TRUE];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
我读过关于CADisplayLink的内容,但更快,因为在fps上工作。
更改标签文字以及动画的持续时间的最佳和理想方法是什么?
由于
答案 0 :(得分:1)
您可以使用 CADisplayLink
它适用于每秒帧数。 60帧是1秒内的变化。所以这意味着这将在一秒钟内调用60次方法。
通过这个,您可以减少时间,因此每秒调用一次,1 / 60.0;
.h
@property (nonatomic, retain) CADisplayLink *displayLink;
.m
//In ViewDidLoad (For UIViewController) or layoutSubviews (for UIView)
_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(countDown)];
_displayLink.frameInterval = 60; //This will force method to be called as 60 frames are passed, means per second.
[_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
-(void) countDown{
NSLog(@"%d", remainingCounts);
label_countdown.text = [NSString stringWithFormat:@"%i", remainingCounts];
// Do Your stuff......
if (--remainingCounts == 0) {
[_displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
_displayLink = nil;
}
}
注意:请确保 removeFromRunLoop 并且没有。
快乐编码:)