Как приостановить фильм в данный момент? IOS - PullRequest
0 голосов
/ 28 октября 2011

Я хочу поставить фильм на паузу в определенное время, а затем продолжить действие много раз.Я попробовал 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];
        }
    }
}

}

И когда я сделал паузу и снова начал играть, он иногда останавливался.и другой Float <Точность. </p>

может кто-то дать другой идеар без NStimer, или что-то еще. Спасибо!

1 Ответ

3 голосов
/ 28 октября 2011

Ваш подход хорош, но для корректной работы требуются некоторые улучшения. Вместо проверки 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.

...