2011-02-06 24 views
6

Bir MPMediaPlayerView'u AVPlayer kullanarak çoğaltırım, böylece bazı işlevler ekleyebilirim. Oynat/duraklatmayla bir UIView oluşturdum ve bir dokunuşla görüntüledim ve ardından HeadsUpUI örnek koduna göre gizlemek için bir zamanlayıcı ayarlıyorum. Sesi ayarlamak için bir MPVolumeView ekledim.MPVolumeView içinde algılama algılamaları

Bu, iyi çalışıyor çünkü sesin etrafında dolaşıyorsanız, ana görünümümün hala bir alt görünümle etkileşimde bulunmadığının ve zamanlayıcı tetiklendiğinde kendini gizlemenin hiçbir fikri yok. Yani hala ses seviyesini ayarlıyorsunuz, ancak kaydırıcı artık orada değil.

Genelde bilmek istediğim, dokunmanın görünüm ve tüm alt görünümlerde sona erdiği zamandır. Bunu yapmanın bir yolu var mı?

Düşünebildiğim tek çözüm, MPVolumeView altyazıları arasında gezinmek ve kaydırıcıyı bulduğumda, izleme tamamlandığını bilmek için izleme özelliğini gözlemlemek. Ama bu, birileri uzun bir süre boyunca bir düğmeye basmakla uğraşmaz. Buna genel bir çözüm bulmayı çok isterim. TIA

cevap

7

MPVolumeView bir jest tanıyıcı ekleyin. Jest tanıyıcı, görünümünüzde zamanlayıcıyı sıfırlayan bir yöntem çağırın.

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 öncesi için nasıl olur? MPVolumeView öğesini genişletmek ve dokunma * etkinliklerini uygulamak işe yaramıyor gibi görünüyor. Düşüncesi olan var mı? – Ephraim

+0

Bu harika çalışıyor. Teşekkürler. 'CancelsTouchesInView' unutma –