2011-02-06 21 views
6

私はAVPlayerを使用してMPMediaPlayerViewを複製していますので、いくつかの機能を追加できます。私は再生/一時停止とUIViewを作成し、私はタッチでそれを表示し、HeadsUpUIのサンプルコードごとにそれを非表示にするタイマーを設定します。ボリュームを調整するためにMPVolumeViewを追加しました。MPVolumeViewでのタッチの検出

ボリュームをスライドさせると、親ビューではまだサブビューとやりとりしていて、タイマーが起動したときに非表示になっているということ以外は問題ありません。ボリュームを調整していますが、スライダはもう存在しません。

私が理想的に知りたいのは、タッチがビューとすべてのサブビューで終了したときです。これを行う方法はありますか?

私が考えることができる唯一の解決策は、MPVolumeViewのサブビューを歩くことです。スライダが見つかったら、追跡が完了したときを知るために追跡プロパティを観察します。しかし、それは誰かが長時間ボタンを押し続けているのを処理しません。私は本当にこれに一般的な解決策を見つけることが大好きです。 TIA

答えて

7

はMPVolumeViewにジェスチャー認識を追加します。ジェスチャレコグナイザに、タイマーをリセットするメソッドを呼び出します。

MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(0, 88, 320, 30)]; 
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(volumeAdjusted:)]; 
recognizer.cancelsTouchesInView = NO;  // this line is VERY important 
[volumeView addGestureRecognizer:recognizer]; 
[self.view addSubview:volumeView]; 
[volumeView release]; 

-(void)volumeAdjusted:(UIGestureRecognizer *)recognizer { 
    // reset timer 
} 
+0

どのように前3.2? MPVolumeViewの拡張とtouch *イベントの実装はうまくいかないようです。何かご意見は? – Ephraim

+0

これは素晴らしい作品です。ありがとう。 'cancelsTouchesInView'を忘れないでください。 –