更新标签,剩余动画持续时间(最佳实践)?

时间:2015-08-22 16:52:44

标签: ios animation synchronization nstimer

我的代码中有动画。如下

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上工作。

更改标签文字以及动画的持续时间的最佳和理想方法是什么?

由于

1 个答案:

答案 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 并且没有。

快乐编码:)