2010-02-05 3 views
0

J'ai une question concernant l'exemple de code MoviePlayer fourni par apple.
Je ne comprends pas comment fonctionne la notification overlayViewTouch. Le message NSlog que j'y ai ajouté n'est pas envoyé lorsque je touche la vue (pas le bouton).Comment fonctionne la notification overlayViewTouched dans l'exemple de code 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... 
} 

Je peux, toutefois, obtenir la notification NSLog si je place dans - (void) touchesBegan dans "MyOverlayView.m". Ce qui me fait penser que est reconnaissant des touches, mais pas l'envoi d'une notification.

// 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]; 



    }  
} 

Quelqu'un peut-il faire la lumière sur ce qui me manque ou mal?

Merci.

Répondre

0

Comme il me semble que l'exemple de code manque l'appel du sélecteur addObserver à la notification. Un exemple de l'enregistrement se trouve dans le AppDelegate:

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

Comme dans NSNotificationCenter Documentation Lorsqu'un objet (connu sous le nom de l'expéditeur de la notification) publie une notification, il envoie un objet NSNotification au centre de notification. Le centre de notification informe alors les observateurs pour lesquels la notification répond aux critères spécifiés lors de l'inscription en leur envoyant le message de notification spécifié, en passant la notification comme seul argument.

S'il n'y a aucun observateur, personne ne sera informé par NSNotificationCenter. Ajoutez simplement le registre approprié dans init par exemple.

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

C'est parce que la vue de superposition est petite. Vous pouvez voir la zone couverte par la vue en superposition en modifiant la couleur d'arrière-plan de la vue en superposition. La notification sera envoyée lorsque vous touchez la zone.

Questions connexes