- (void)timerTickPlayer:(NSTimer*)timer
{
timeSec = 0;
timeMin = 0;
timeSec++;
int displayTime = [[NSNumber numberWithFloat:player.duration] intValue];
if (timeSec == displayTime)
{
timeSec = 0;
[timer invalidate];
}
NSString* playerTime = [NSString stringWithFormat:@"%2d",timeSec];
labelTime.text = playerTime;
}
以上是我尝试让计时器从00开始计数的方法, 直到达到持续时间。
但事实证明,标签只会显示片刻的持续时间,然后再次变回00.
我的代码/逻辑问题在哪里?
这是最新情况!
哈哈,还有一个bug,似乎已经解决了。答案 0 :(得分:1)
使用AVPlayer,无需计时器:
${param.key}
回答ChiHsi Chung提出的额外问题:
根据documentation of addPeriodicTimeObserverForInterval:queue:usingBlock:
:
重要
您应该在回调块中使用弱引用来防止创建保留周期。
您需要创建自己的// timescale of 600 to report changes every 1/600th of a second (value taken from the doc of CMTimeScale)
CMTime interval = CMTimeMakeWithSeconds(1, 600)
__weak typeof(self) weakSelf = self;
self.timeObserver = [player addPeriodicTimeObserverForInterval:interval
queue:NULL
usingBlock:
^(CMTime time)
{
int timeSec = (int)CMTimeGetSeconds(time);
NSString *playerTime = [NSString stringWithFormat:@"%2d", timeSec];
weakSelf.labelTime.text = playerTime;
}];
强属性timeObserver
,以存储id
的返回值。不,没有类型,因为根据定义,addPeriodicTimeObserverForInterval:queue:usingBlock:
应该是:
作为参数传递给
timeObserver
取消观察的不透明对象。