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
Ум, я не понимал этого .. – Emil
Это прекрасно. И если вы хотите получить дополнительные разъяснения, сообщите мне, какую часть вы не поняли, или какую часть вы поняли, или как вы знакомы с UIKit. – Felixyz
Я довольно новичок в разработке iPhone, поэтому я вообще не знаком с UIKit. Но здесь поздно ночью, где я живу, так что завтра буду завтракать, ок? – Emil