2011-08-16 6 views
1

오버레이보기를 맨 위에 추가하려는 무비 플레이어보기 컨트롤러가 있습니다.MPMoviePlauerViewController 상단의 오버레이 문제

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     [[moviePlayer view] addSubview:[self overlayControlsView]]; 

     UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
     [[self view] addGestureRecognizer:tap]; 
    } 
    return self; 
} 

overlayControlsView 현재 만 UILabel의이다 :

는 다음 코드를 사용했다.

- (void)handleTap:(UITapGestureRecognizer *)sender { 
    NSLog(@"Tap handled"); 
    if ([sender state] == UIGestureRecognizerStateEnded) { 
     if ([[self overlayControlsView] isHidden]) { 
      [[self overlayControlsView] setHidden:NO]; 
     } else { 
      [[self overlayControlsView] setHidden:YES]; 
     } 
    } 
} 

무비 플레이어가 방금 나타나면 오버플로 컨트롤을 표시하고 숨 깁니다.

그러나 moviewplayer로드 상태가 변경되고 재생되기 시작한 직후 (인터넷에서 비디오를로드하므로 여기에 약간의 시간 차이가 있음) handleTap 메서드가 더 이상 호출되지 않았습니다.

아무도 아이디어가 있습니까? 오버레이 컨트롤을 추가하는 더 좋은 방법이 있습니까?

답변

1

코드에 무슨 문제가 있는지 알지 못합니다. 다음은 맞춤 검색 버튼을 사용하여 오버레이 컨트롤을 수행하는 방법의 대안입니다.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSString *urlString = [[NSBundle mainBundle] pathForResource:@"sample-video" ofType:@"mov"]; 
    player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:urlString]]; 
    UIButton *overlayView = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [overlayView setTitle:@"" forState:UIControlStateNormal]; 
    [overlayView setTitle:@"Play" forState:UIControlStateSelected]; 
    [overlayView addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside]; 
    player.view.frame = CGRectMake(50, 50, 200, 250); 
    overlayView.frame = player.view.frame; 
    [player.view addSubview:overlayView]; 
    player.controlStyle = MPMovieControlStyleNone; 
    [self.view addSubview:player.view]; 
    } 


- (void)handleTap:(id *)sender { 
    UIButton *btn = (UIButton *)sender; 
    if (btn.selected) { 
     [player play]; 
     [btn setSelected:NO]; 
    } 
    else { 
     [player pause]; 
     [btn setSelected:YES]; 
    } } 
+0

내가 잘못 설명하면 죄송합니다. 하지만 내가하고 싶은 것은 플레이어를 두 드릴 때 오버레이보기를 표시하거나 숨기는 것입니다. 사용자 정의 오버레이보기로 기본 컨트롤을 생각하면 기본 컨트롤과 함께 페이드 인/아웃됩니다. 귀하의 버튼이 맨 위에 있고, 클릭하면 동영상이 재생/일시 중지됩니다. 이는 원하는 것이 아닙니다. – PeterWong

+0

@PeterWong, 재생/일시 정지는 오버레이 컨트롤을 보여주는 예일 뿐이므로 오버레이보기/숨기기에도 동일하게 사용할 수 있다고 생각합니다. 또한 MPMoviePlayerController 뷰보다 UIGestureRecognizer를 사용하는 것과 동일한 문제가 있습니다.이 방법을 선택했습니다. . – illuminatus

+0

그래서 전체 플레이어가 탭핑을 기다리는 중에 보이지 않는 버튼이 될까요? 멋지다. 내일 한번 해봐. – PeterWong