Обнаружение касаний в MPVolumeView - PullRequest
6 голосов
/ 06 февраля 2011

Я реплицирую MPMediaPlayerView, используя AVPlayer, чтобы я мог добавить некоторые функции к нему. Я создал UIView с play / pause, отображаю его на ощупь и затем устанавливаю таймер, чтобы скрыть его в соответствии с примером кода HeadsUpUI. Я добавил MPVolumeView для регулировки громкости.

Это прекрасно работает, за исключением того, что если вы перемещаете объем, мой родительский вид не имеет представления о том, что вы все еще взаимодействуете с подпредставлением, и скрывается, когда срабатывает таймер. Таким образом, вы все еще регулируете громкость, но ползунка больше нет.

В идеале я хотел бы знать, когда касание закончилось в представлении и во всех подпредставлениях. Есть ли способ сделать это?

Единственное решение, которое я могу придумать, - это пройтись по подпредставлениям MPVolumeView, а когда я найду ползунок, наблюдать за свойством tracking, чтобы узнать, когда оно завершится. Но это не позволяет кому-то долго удерживать кнопку. Я действительно хотел бы найти общее решение для этого.

ТИА

1 Ответ

7 голосов
/ 21 марта 2011

Добавить распознаватель жестов в 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
}
...