2010-02-05 2 views
0

У меня есть вопрос относительно кода примера MoviePlayer, предоставленного apple.
Я не понимаю, как работает уведомление overlayViewTouch. Сообщение NSlog, которое я добавил к нему, не отправляется, когда я касаюсь вида (не кнопки).Как работает оверлейное визуальное уведомление в образце кода MoviePlayer

// post the "overlayViewTouch" notification and will send 
// the overlayViewTouches: message 
- (void)overlayViewTouches:(NSNotification *)notification 
{ 
    NSLog(@"overlay view touched"); 
    // Handle touches to the overlay view (MyOverlayView) here... 
} 

Я могу, однако, получить уведомление NSLog если поместить его в - (Недействительными) touchesBegan в "MyOverlayView.m". Что заставляет меня думать, что это is признавая касания но не отправка уведомления.

// Handle any touches to the overlay view 
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
     UITouch* touch = [touches anyObject]; 
     if (touch.phase == UITouchPhaseBegan) 
     { 
      NSLog(@"overlay touched(from touchesBegan") 
      // IMPORTANT: 
      // Touches to the overlay view are being handled using 
      // two different techniques as described here: 
      // 
      // 1. Touches to the overlay view (not in the button) 
      // 
      // On touches to the view we will post a notification 
      // "overlayViewTouch". MyMovieViewController is registered 
      // as an observer for this notification, and the 
      // overlayViewTouches: method in MyMovieViewController 
      // will be called. 
      // 
      // 2. Touches to the button 
      // 
      // Touches to the button in this same view will 
      // trigger the MyMovieViewController overlayViewButtonPress: 
      // action method instead. 

      NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
      [nc postNotificationName:OverlayViewTouchNotification object:nil]; 



    }  
} 

Может ли кто-нибудь пролить свет на то, что мне не хватает или что-то не так?

спасибо.

ответ

0

Как мне кажется, в образце кода отсутствует вызов selectObserver для уведомления. Пример регистрации может быть найден в AppDelegate:

[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(moviePreloadDidFinish:) 
       name:MPMoviePlayerContentPreloadDidFinishNotification 
       object:nil]; 

Как и в NSNotificationCenter документации Когда объект (известный как отправитель уведомлений) отправляет уведомление, он отправляет объект NSNotification в центр уведомлений. Центр уведомлений уведомляет обо всех наблюдателях, для которых уведомление соответствует критериям, указанным при регистрации, отправив им указанное уведомление, передав уведомление в качестве единственного аргумента.

Если нет наблюдателей, никто не будет проинформирован NSNotificationCenter.

Просто добавьте соответствующий регистр в init, например.

[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(overlayViewTouches:) 
       name:OverlayViewTouchNotification 
       object:nil]; 
0

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

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