如何在给定时间暂停电影?IOS

时间:2011-10-28 04:15:05

标签: iphone ios video nstimer movie

我想在给定时间暂停一部电影,然后继续多次动作。 我试过像这样的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或其他东西的情况下给出另一个想法。谢谢!

1 个答案:

答案 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范围内。