2011-02-06 10 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' 잊지 마세요. –

관련 문제