2015-10-14 34 views
13

Takılı kulaklığın düğmelerini kullanarak sadece kendi uygulamamın içinde farklı eylemleri tetiklemeye çalışıyorum (baskının yaptığı gibi benzer bir şey). Ancak fark ettim ki, MPRemoteCommandCenter veya remoteControlReceivedWithEvent temsilcisini kullanırsam farkedilir bir gecikmeyle olayları alıyorum. Maddeyi daha da kötü yapan şey, eğer düğmeye iki kez basarsanız hızlı bir şekilde sadece bir tane UIEventTypeRemoteControl alacağım.iphone'daki kulaklık düğmesine basıldığında gecikme süresi

Benzer bir sorun yaşayan, bunun nedenini bilen ya da daha iyi bir çözüm bulmuş olan var mı? Ios8 ve ios9 altında test edilmiştir.

+0

Birçok platformda çift basma eylemleri, tek bir kullanıcı olayı olarak işlenir. UIEventTypeRemoteControl düğmesinin kaç kez basıldığını belirten herhangi bir özellik içerir mi? –

+0

Ne tür bir gecikme "gecikme" alıyorsunuz? Yarım saniye ile saniye arasında mı? Birkaç saniye? Örnek bir proje veya tekrarlanabilir bir test vakası sunabilir misiniz? – JAL

cevap

1

Hızlı bir çift basış, tek bir kullanıcı eylemidir, çünkü giriş için kulaklık kontrolünü kullanan hemen her uygulamada istenen davranış budur. Gelen kontrol olaylarını manuel olarak çözmek, sıraya almak ve ayrıştırmak zorunda kalan geliştiricileri kurtarır ve iyi bir şeydir (tm)!

Bunun çalışması için, sistem daha fazla kullanıcı girişi beklerken az miktarda gecikme sunacaktır. Bu işlemin tamamlanması için yalnızca birkaç yüz milisaniye gerekir, ardından etkinliği kodunuzda alırsınız.

çift pres tespitinin, uzun bir acı, fakat yararlı örnek:

  1. Kullanıcı
  2. Sistem bildirimler pres kulaklık kontrolü üzerine doğru bastırılan, serbest bırakılması için bekler
  3. Kullanıcı bültenleri kulaklık kontrol
  4. Sistem bildirimleri serbest bırakıldı, zaman düğmesinin basılı tutulduğunu algılar (uzun basma vs kısa basma) ve kuyruklar tek basma olayı
  5. Sistem, bir çift basış olması durumunda 200ms bekler
  6. Oldu! Kullanıcı
  7. Kullanıcı bültenleri kulaklık kontrolü
  8. Sistem bir üçlü olduğunu
  9. Sistem çift pres olayı içine tek pres olayı sıraya durumunda 200ms bekler dönüştürür serbest bırakılması için bekler, kulaklık kumanda üzerindeki
  10. Sistem bildirimler basın aşağı bastırır -Basın
  11. 200 ms
  12. Sisteminde hiçbir kullanıcı girişi çift pres olayı harekete ve

gecikme bak nasıl kuyruğunu temizler Tek/çift/üçlü-basma tespiti için gereklidir.

olay başvurunuzu ulaştığında kullanıcının yapılmış tıklayın ne tür açıklayan bir alt türü sahip olacaktır:

let rc = event!.subtype 
print("received remote control \(rc.rawValue)") // 101 = pause, 100 = play 

switch rc { 
    case .RemoteControlTogglePlayPause: 
     // .. 
    case .RemoteControlPlay: 
     // .. 
    case .RemoteControlPause: 
     // .. 
    default:break 
} 

similar question işaret bir bu olay kodu tamsayılar üzerinde bir cevap gibi bir şey olacak;

100 = play 
101 = pause 
103 = single mic click 
104 = double mic click 
105 = triple mic click 
etc ...