自定义MPMoviePlayerController(手势控制提高音量和进度)

使用系统自定义的 MPMoviePlayerController。实现手势向上下滑动提高(降低)音量,手势向左右滑动控制快进和快退

#import <MediaPlayer/MediaPlayer.h>

@interface KKBMoviePlayerController : MPMoviePlayerController<UIGestureRecognizerDelegate>

@end

#import "KKBMoviePlayerController.h"
#import "AppDelegate.h"
@interface KKBMoviePlayerController(){
    BOOL _inFullScreen;
    UIPanGestureRecognizer *_pan;
    
    CGPoint _lastPoint;
    BOOL _startChange;
    BOOL _changeVolume;
}

@end

@implementation KKBMoviePlayerController

- (id)initWithContentURL:(NSURL *)url{
    self =[super initWithContentURL:url];
    if (self) {
        
        self.view.backgroundColor = [UIColor clearColor];
        self.initialPlaybackTime = -1;
        self.endPlaybackTime = -1;
        [self prepareToPlay];
        [self play];
        
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(enterFullScreen:)
                                                     name:MPMoviePlayerWillEnterFullscreenNotification
                                                   object:nil];
        
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(leaveFullScreen:)
                                                     name:MPMoviePlayerWillExitFullscreenNotification
                                                   object:nil];
    }
    return self;
}

#pragma mark - full screen controller

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    return YES;
}

- (void)handlePan:(UIPanGestureRecognizer*)rec{
    if (_inFullScreen) {
        if (rec.state == UIGestureRecognizerStateBegan) {
            _lastPoint = [rec locationInView:self.view];
        } else if (rec.state == UIGestureRecognizerStateChanged) {
            CGPoint nowPoint = [rec locationInView:self.view];
            
            if (_startChange == NO) {
                if (fabs(nowPoint.y - _lastPoint.y) > fabs(nowPoint.x - _lastPoint.x)) {
                    _changeVolume = NO;
                } else {
                    _changeVolume = YES;
                }
                _startChange = YES;
            } else {
                if (_changeVolume) {
                    //change volume
                    float volume = [[MPMusicPlayerController applicationMusicPlayer] volume];
                    float newVolume = volume;
                    
                    if (nowPoint.x == _lastPoint.x) {
                        
                    } else {
                        if (nowPoint.x < _lastPoint.x) {
                            newVolume += 0.01;
                        } else {
                            newVolume -= 0.01;
                        }
                    }
                    
                    if (newVolume < 0) {
                        newVolume = 0;
                    } else if (newVolume > 1.0) {
                        newVolume = 1.0;
                    }
                    
                    [[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];
                } else {
                    //change playback state
                    if (self.playbackState != MPMoviePlaybackStateSeekingForward &&
                        self.playbackState != MPMoviePlaybackStateSeekingBackward) {
                        if (nowPoint.y == _lastPoint.y) {
                            
                        } else {
                            if (nowPoint.y < _lastPoint.y) {
                                [self beginSeekingForward];
                            } else {
                                [self beginSeekingBackward];
                            }
                        }
                        _lastPoint = nowPoint;
                    }
                }
                
            }
            
        } else if (rec.state == UIGestureRecognizerStateCancelled ||
                   rec.state == UIGestureRecognizerStateEnded ||
                   rec.state == UIGestureRecognizerStateFailed){
            _startChange = NO;
            [self endSeeking];
        }
    }
}

- (void)enterFullScreen:(NSNotification*)notification{
    _inFullScreen = YES;
    
    _pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    _pan.delegate = self;
    
    [[[[UIApplication sharedApplication] windows] objectAtIndex:0] addGestureRecognizer:_pan];
}

- (void)leaveFullScreen:(NSNotification*)notification{
    _inFullScreen = NO;
    [[[[UIApplication sharedApplication] windows] objectAtIndex:0] removeGestureRecognizer:_pan];
}

@end


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值