2011-08-16 60 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]; 
     } 
    } 
} 

當電影放映機剛剛顯示時,點擊它會導致overlayControlsView顯示並隱藏成功。

然而,在moviewplayer負載狀態改變並開始播放後(我從Internet上載入視頻,因此這裏有一些時間間隙),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,播放/暫停只是一個顯示覆蓋控制的例子,我認爲你可以使用相同的顯示/隱藏覆蓋視圖...我也有相同的問題,使用UIGestureRecognizer MPMoviePlayerController視圖..並選擇這種方式。 – illuminatus

+0

因此,這將是一個無形的按鈕頂部的整個球員等待竊聽?這似乎很棒。明天將有一個嘗試。 – PeterWong