iOS小窗播放 手勢拖動

```

#import "SVP.h"

#import "LBHLivePlayerViewController.h"

#import "LBHLivePlayerView.h"

@interface LBHLivePlayerViewController (){

SVPVideo *_video;

SVPPlayerList *_playList;

CGPoint pointLeftTop;

BOOL _viderIsEnd;

}

@property (assign, nonatomic) CGPoint beginpoint;

@property (assign, nonatomic) UIPanGestureRecognizer* pan;

@end

@implementation LBHLivePlayerViewController

//

static NSString *SVPMode = nil;

- (void)viewDidLoad {

[super viewDidLoad];

self.pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];

[self.view addGestureRecognizer:self.pan];

NSNotificationCenter * orientChange = [NSNotificationCenter defaultCenter];

[orientChange addObserver:self selector:@selector(orientChangeLive:) name:UIDeviceOrientationDidChangeNotification object:nil];

// [self.video addObserver:self forKeyPath:@"isEnd" options:NSKeyValueObservingOptionNew context:nil];

}

-(void)orientChangeLive:(NSNotification*)notification{

UIDeviceOrientation? orient = [UIDevice currentDevice].orientation;

switch (orient)

{

case UIDeviceOrientationFaceUp:

[self pansmall];

break;

case UIDeviceOrientationPortrait:

[self pansmall];

break;

case UIDeviceOrientationLandscapeLeft:

[self panlang];

break;

case UIDeviceOrientationUnknown:

[self pansmall];

break;

case UIDeviceOrientationLandscapeRight:

[self panlang];

break;

default:

[self pansmall];

break;

}

}

//-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

//

//? ? if (self.video.isEnd) {

//? ? ? ? _viderIsEnd=YES;

//? ? ? ? }else{

//? ? ? ? ? ? self.alertIsEndBtn.hidden=YES;

//? ? ? ? }

//

//? ? }

//}

-(void)panlang{

[self.view removeGestureRecognizer:self.pan];

[self.skinView addGestureRecognizer:self.pan];

}

-(void)pansmall{

[self.skinView removeGestureRecognizer:self.pan];

[self.view addGestureRecognizer:self.pan];

}

- (void)setPlayWindowStatus:(SVPlayerWindowsStatus)aWindowStatus

{

if (_playWindowStatus != aWindowStatus)

{

_playWindowStatus = aWindowStatus;

switch (_playWindowStatus) {

case SVPlayerOrientationPortraitNormal:

{

self.view.frame =CGRectMake(0, 0, Screen_Width, Screen_Height);

}

break;

case SVPlayerOrientationPortraitMini:

{

[UIView animateWithDuration:0.2 animations:^{

self.view.frame =CGRectMake(100,50,90,160);

}];

}

break;

case SVPlayerOrientationLandscapeNormal:

{

self.view.frame =CGRectMake(0, 0, Screen_Width, Screen_Height);

}

break;

case SVPlayerOrientationLandscapeMini:

{

[UIView animateWithDuration:0.2 animations:^{

self.view.frame =CGRectMake(Screen_Width-10-180,50,160,102);

}];

}

break;

default:

break;

}

}

}

- (Class)playerSkinClass{

return [LBHLivePlayerView class];

}

-(void)pan:(UIPanGestureRecognizer *)panGes{

if (_playWindowStatus == SVPlayerOrientationPortraitMini || _playWindowStatus == SVPlayerOrientationLandscapeMini)

{

UIView *piece = [panGes view];

CGPoint translation = [panGes translationInView:[piece superview]];

if ([panGes state] == UIGestureRecognizerStateBegan || [panGes state] == UIGestureRecognizerStateChanged) {

//? ? ? ? ? ? [UIView animateWithDuration:0.2 animations :^{

//

//? ? ? ? ? ? ? ? [piece setCenter:CGPointMake([piece center].x + translation.x,

//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [piece center].y + translation.y)];

//

//? ? ? ? ? ? ? ? [panGes setTranslation:CGPointZero inView:[piece superview]];

//? ? ? ? ? ? }];

[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

[piece setCenter:CGPointMake([piece center].x + translation.x,

[piece center].y + translation.y)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

} completion:^(BOOL finished) {

}];

}

if([panGes state] == UIGestureRecognizerStateEnded){

if (_playWindowStatus == SVPlayerOrientationLandscapeMini )

{

[UIView animateWithDuration:0.2 animations:^{

if(([piece center].x + translation.x)<90){

[piece setCenter:CGPointMake(90,[piece center].y + translation.y)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

if (([piece center].x + translation.x)>Screen_Width-90) {

[piece setCenter:CGPointMake(Screen_Width-90,[piece center].y + translation.y)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

if (([piece center].y + translation.y)>Screen_Height-51) {

[piece setCenter:CGPointMake([piece center].x + translation.x,Screen_Height-51)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

if (([piece center].y + translation.y)<51) {

[piece setCenter:CGPointMake([piece center].x + translation.x,51)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

}];

}

if (_playWindowStatus == SVPlayerOrientationPortraitMini){

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];

[UIView animateWithDuration:0.2 animations:^{

if(([piece center].x + translation.x)<45){

[piece setCenter:CGPointMake(45,[piece center].y + translation.y)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

if (([piece center].x + translation.x)>Screen_Width-45) {

[piece setCenter:CGPointMake(Screen_Width-45,[piece center].y + translation.y)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

if (([piece center].y + translation.y)>Screen_Height-80) {

[piece setCenter:CGPointMake([piece center].x + translation.x,Screen_Height-80)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

if (([piece center].y + translation.y)<80) {

[piece setCenter:CGPointMake([piece center].x + translation.x,80)];

[panGes setTranslation:CGPointZero inView:[piece superview]];

}

}];

}

}

}else{

if([self.skinView.playerLoadingView isLoading]==NO && self.video.isEnd==NO && [LPLejuUtility isCouldConnectedNet]){

self.fullScreen=YES;

[super pan:panGes];

}

}

}

- (void)tapGestureHandler:(id)sender

{

if([self skinView].inChatMode)

{

if([self skinView].inVoiceRecordMode)

{

return;

}

if ([[[UIDevice currentDevice] systemVersion] intValue] < 6)

{

UITapGestureRecognizer *ges = (UITapGestureRecognizer*)sender;

CGPoint point = [ges locationInView:self.view];

UIView* result = [ges.view hitTest:point withEvent:nil];

if(result.frame.size.height < ges.view.frame.size.height)

{

return;

}

}

[self skinView].inChatMode = NO;

return;

}

}

@end

```

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容