0

アップルが提供するMoviePlayerサンプルコードについて質問があります。
overlayViewTouch通知がどのように機能するのかわかりません。追加したNSlogメッセージは、(ボタンではなく)ビューをタッチしても送信されません。

// 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... 
}

ただし、「MyOverlayView.m」の-(void)touchesBeganに配置すると、NSlog通知を受け取ることができます。これは、タッチを認識しているが通知を送信していない思わせます。

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



  }    
}

誰かが私が欠けていることや間違っていることに光を当てることができますか?

ありがとうございました。

4

2 に答える 2

0

サンプル コードには、通知への addObserver セレクター呼び出しがありません。登録の例は、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];
于 2010-03-03T22:02:29.933 に答える
0

オーバーレイ ビューが小さいためです。オーバーレイ ビューの背景色を変更することで、オーバーレイ ビューでカバーされる領域を確認できます。エリアをタッチすると通知が届きます。

于 2010-05-11T02:19:51.157 に答える