效果圖就不放了
下面直接貼代碼:
首先定義一個Direction
枚舉類型,用于記錄手勢滑動方向
typedef NS_ENUM(NSUInteger, Direction) {
DirectionLeftOrRight,//左右手勢
DirectionUpOrDown,//上下手勢
DirectionNone//沒有手勢
}
在頁面定義一個全局的手勢,用于記錄手勢方向
@property (assign, nonatomic) Direction direction;
涉及到調節(jié)上下調節(jié)音量和屏幕亮度,所以定義一個bool值isVolume
來判斷是調音量還是亮度
@property (nonatomic, assign) BOOL isVolume;/*!*是否在調節(jié)音量*/
為頁面添加手勢
// 添加平移手勢淌山,用來控制音量、亮度淮椰、快進快退
self.pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panDirection:)];
self.pan.delegate = self;
[self.overlayView addGestureRecognizer:self.pan];
實現@selector(panDirection:)
方法,由于手勢我是用于視頻項目中,方法中可能出現視頻類的屬性可直接忽略
- (void)panDirection:(UIPanGestureRecognizer *)pan
{
//根據在view上Pan的位置培己,確定是調音量還是亮度
//獲取當前頁面手指觸摸的點
CGPoint locationPoint = [pan locationInView:self.overlayView];
// 根據上次和本次移動的位置,算出一個速率的point
//這個很關鍵,這個速率直接決定了平移手勢的快慢
CGPoint veloctyPoint = [pan velocityInView:self.overlayView];
// 判斷是垂直移動還是水平移動
switch (pan.state) {
case UIGestureRecognizerStateBegan:{ // 開始移動
// 使用絕對值來判斷移動的方向
CGFloat x = fabs(veloctyPoint.x);
CGFloat y = fabs(veloctyPoint.y);
if (x > y) { // 水平移動
self.direction = DirectionLeftOrRight;
//記錄滑動時播放器的時間
self.sumTime = self.player.currentPlaybackTime;
// 暫停視頻播放
[self.player pause];
}else if (x < y){ // 垂直移動
//音量和亮度
self.direction = DirectionUpOrDown;
//判斷移動的點在屏幕的哪個位置
if (locationPoint.x <= self.overlayView.frame.size.width / 2.0) {//以屏幕的1/2位分界線
//亮度,調節(jié)亮度
self.isVolume = NO;
} else {
//音量.調節(jié)音量
self.isVolume = YES;
}
}
break;
}
case UIGestureRecognizerStateChanged:{ // 正在移動
switch (self.direction){//通過手勢變量來判斷是什么操作
case DirectionUpOrDown:{//上下滑動
//音量和亮度
[self verticalMoved:veloctyPoint.y]; // 垂直移動方法只要y方向的值
break;
}
case DirectionLeftOrRight:{
[self horizontalMoved:veloctyPoint.x]; // 水平移動的方法只要x方向的值
break;
}
default:
break;
}
break;
}
case UIGestureRecognizerStateEnded:{ // 移動停止
switch (self.direction) {
case DirectionUpOrDown:{
// 垂直移動結束后,把狀態(tài)改為不再控制音量
self.isVolume = NO;
break;
}
case DirectionLeftOrRight:{
//水平
self.isVolume = NO;
//做操作,讓播放器時間等于移動的距離加上移動前記錄的時間
self.player.currentPlaybackTime = self.sumTime;
[self.player play];
break;
}
default:
break;
}
}
default:
break;
}
}
再貼一下水平 horizontalMoved
和垂直移動verticalMoved
方法
- (void)horizontalMoved:(CGFloat)value
{
// 快進快退的方法
NSString *style = @"";
if (value < 0) { style = @"<<"; }//向左移動
if (value > 0) { style = @">>"; }//向右移動
if (value == 0) { return; }
}
- (void)verticalMoved:(CGFloat)value
{
//通過三目運算符來判斷顯示音量還是亮度
//關于音量界面不顯示圖標的問題,可以百度搜索BrightnessView這個類來解決
self.isVolume ? (self.volumeViewSlider.value -= value / 10000) : ([UIScreen mainScreen].brightness -= value / 10000);
}
//初始化一個音量界面
- (MPVolumeView * )volumeView { if (_volumeView ==nil){
_volumeView = [[MPVolumeView alloc] init];
[_volumeView sizeToFit];
for (UIView *view in [_volumeView subviews]){
if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
self.volumeViewSlider = (UISlider*)view;
break;
}
}
}
return _volumeView;
}