我想在给定时间暂停一部电影,然后继续多次动作。 我试过像这样的NSTimer:
#define Timer 0.05
#define Accuracy 0.025
pauseTimeArray = [NSArray arrayWithObjects:[NSNumber numberWithFloat:5.00],[NSNumber numberWithFloat:10.00],[NSNumber numberWithFloat:15.00] , nil];
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];
- (void)timeAction{
if (_moviePlayer.playbackState == MPMoviePlaybackStatePlaying) {
NSNumber * positionNum = [NSNumber numberWithFloat:_moviePlayer.currentPlaybackTime];
float positionFloat = [positionNum floatValue];
for (NSNumber * pauseNum in _pauseTimeArray) {
float pauseFloat = [pauseNum floatValue];
float differentFloat = fabsf(pauseFloat - positionFloat);
if (differentFloat < Accuracy) {
[_moviePlayer pause];
}
}
}
}
当我暂停并再次播放时,它偶尔会暂停。和不同的浮动&lt;精度。
有人可以在没有NStimer或其他东西的情况下给出另一个想法。谢谢!
答案 0 :(得分:3)
您的方法很好,但需要一些改进才能正常工作。
而不是在positionFloat
+/- pauseFloat
的范围内检查Accuracy
,而是保留上次暂停时间,作为检查点。然后,如果positionFloat
大于此检查点,请暂停电影并设置下一个检查点。
pauseTimeArray = [NSArray arrayWithObjects:[NSNumber numberWithFloat:5.00],[NSNumber numberWithFloat:10.00],[NSNumber numberWithFloat:15.00] , nil];
uint currentCheckpoint = 0;
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];
- (void)timeAction{
if (_moviePlayer.playbackState == MPMoviePlaybackStatePlaying) {
NSNumber * positionNum = [NSNumber numberWithFloat:_moviePlayer.currentPlaybackTime];
float positionFloat = [positionNum floatValue];
float pauseFloat = [[pauseTimeArray objectAtIndex: currentCheckpoint] floatValue];
if (positionFloat > pauseFloat) {
[_moviePlayer pause];
currentCheckpoint++;
}
}
}
当然,检查currentCheckpoint是否在pauseTimeArray范围内。