6

AVPlayerを使用してMPMediaPlayerViewを複製しているので、いくつかの機能を追加できます。再生/一時停止を使用してUIViewを作成し、タッチで表示してから、HeadsUpUIサンプルコードに従って非表示にするようにタイマーを設定しました。音量を調整するためにMPVolumeViewを追加しました。

ボリュームをスライドさせている場合を除いて、これは問題なく機能します。ただし、親ビューは、サブビューを操作していることを認識せず、タイマーが起動すると非表示になります。したがって、音量を調整しているのですが、スライダーはもうありません。

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

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

TIA

4

1 に答える 1

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
}
于 2011-03-21T16:54:37.183 に答える