2010-02-22 3 views
1

У меня есть настройка MPMoviePlayer, чтобы воспроизвести вступительный ролик в мое приложение. Это отлично работает, единственная проблема заключается в том, что он длится 14 секунд, и я хочу дать своим пользователям возможность пропустить ввод, нажав в любом месте фильма.MPMoviePlayer уволить при нажатии

Я скрыл элементы управления видео, поскольку они не нужны.

Код:

NSString *introPath = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"mov"]; 
intro = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:introPath]]; 
[intro setMovieControlMode:MPMovieControlModeHidden]; 
[intro play]; 

Спасибо!

ответ

2

EDIT: Мое первоначальное решение не будет работать, потому что фильм показан во втором окне, наложенном поверх главного окна приложения (очень редко есть несколько окон в иерархии представлений на iPhone) , Это решение, основанное на Apple's MoviePlayer sample code, делает работу:

. . . 
    // assuming you have prepared your movie player, as in the question 
    [self.intro play]; 

    NSArray* windows = [[UIApplication sharedApplication] windows]; 
    // There should be more than one window, because the movie plays in its own window 
    if ([windows count] > 1) 
    { 
     // The movie's window is the one that is active 
     UIWindow* moviePlayerWindow = [[UIApplication sharedApplication] keyWindow]; 
     // Now we create an invisible control with the same size as the window 
     UIControl* overlay = [[[UIControl alloc] initWithFrame:moviePlayerWindow.frame]autorelease]; 

     // We want to get notified whenever the overlay control is touched 
     [overlay addTarget:self action:@selector(movieWindowTouched:) forControlEvents:UIControlEventTouchDown]; 

     // Add the overlay to the window's subviews 
     [moviePlayerWindow addSubview:overlay]; 
    } 
. . . 

// This is the method we registered to be called when the movie window is touched 
-(void)movieWindowTouched:(UIControl*)sender 
{ 
    [self.intro stop]; 
} 

NB: Вы должны сохранить ссылку на видеоплеер в переменном экземпляре, и это наиболее удобно объявить свойство, которое можно использовать для доступа к нему. Вот почему в примере используется self.intro, а не только intro. Если вы не знаете, как объявить переменную экземпляра и свойство, на этом сайте и в других местах есть много информации.

**** ОРИГИНАЛЬНЫЙ ОТВЕТ НИЖЕ

(Не работает в этом случае, но и во многих подобных случаях, поэтому я оставлю это как предупреждение и/или вдохновляющим примером.)

, , , если ничего не работает, я бы рекомендовал подклассифицировать UIWindow и убедиться, что ваш делегат приложения создает экземпляр, вместо обычного UIWindow. Вы можете перехватывать штрихи в этом классе и отправлять уведомление или отменить фильм напрямую (если вы сохранили указатель на MPMoviePlayer в ivar в вашем подклассе окна).

@interface MyWindow : UIWindow { 
} 
@end 

@implementation MyWindow 
// All touch events get passed through this method 
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    // The screen has been touched, send a notification or stop the movie 
    return [super hitTest:point withEvent:event]; 
} 
@end 
+0

Ум, я не понимал этого .. – Emil

+0

Это прекрасно. И если вы хотите получить дополнительные разъяснения, сообщите мне, какую часть вы не поняли, или какую часть вы поняли, или как вы знакомы с UIKit. – Felixyz

+0

Я довольно новичок в разработке iPhone, поэтому я вообще не знаком с UIKit. Но здесь поздно ночью, где я живу, так что завтра буду завтракать, ок? – Emil

Смежные вопросы