2015-12-04 1 views
3

Я заметил одно поведение в AVPlayerViewController от Apple по умолчанию на tvOS. Если вызвать временную шкалу, где вы можете перемотки назад или вперед видео, а затем, если вы поставите и оставить свой палец на правой стороне тачпада доном SiriRemote метка «10» появляется рядом с текущим временем воспроизведенияSiri Remote. Направленные стрелки

Screenshot

Если вы удалите палец, не нажимая на пульте дистанционного управления, метка «10» исчезнет.

То же самое касается касания левой стороны пульта дистанционного управления, буква «10» отображается слева от текущего времени воспроизведения.

Вопрос в том, как я могу получить обратный вызов для этого события? Случай пользователя, поместившего палец на сторону пульта.

UPD

UITapGestureRecognizer с allowedPressTypes = UIPressTypeRightArrow будет генерировать событие после того, как пользователь отпускает палец с сенсорной поверхностью. Я заинтересован в событии, которое будет сгенерировано, как только пользователь коснется края поверхности (и, вероятно, оставит пальцем)

+0

Это будут [позиционные краны] (http://stackoverflow.com/a/32590064/2108547). –

+2

@ DanielStorm, это близко, но не совсем то, что я искал. UITapGestureRecognizer с allowedPressTypes = UIPressTypeRightArrow будет генерировать событие после того, как пользователь освободит палец от поверхности касания. Я заинтересован в событии, которое будет сгенерировано, как только пользователь коснется края поверхности (и, вероятно, оставит палец) –

ответ

7

После нескольких дней поиска я пришел к выводу, что UIKit не сообщает об этом событии. Но можно использовать фреймворк GameController, чтобы перехватить подобное событие. Siri remote представлен как GCMicroGamepad. Он имеет свойство BOOL reportsAbsoluteDpadValues, которое должно быть установлено на YES. Чем каждый раз, когда пользователь прикасается к поверхности, GCMicroGamepad обновит свои значения для свойства dpad. dpad Недвижимость представляет собой float x,y значения, которые варьируются в пределах [-1,1] каждый. Эти значения представляют собой Картезианскую систему координат, где (0,0) - центр поверхности касания, (-1,-1) - нижняя левая точка возле кнопки «Меню» на пульте дистанционного управления, (1,1) - верхняя правая точка.

Собирает все вместе мы можем иметь следующий код, чтобы поймать событие:

@import GameController; 

[[NSNotificationCenter defaultCenter] addObserverForName:GCControllerDidConnectNotification 
                object:nil 
                queue:[NSOperationQueue mainQueue] 
               usingBlock:^(NSNotification * _Nonnull note) { 
    self.controller = note.object; 
    self.controller.microGamepad.reportsAbsoluteDpadValues = YES; 
    self.controller.microGamepad.dpad.valueChangedHandler = 
    ^(GCControllerDirectionPad *dpad, float xValue, float yValue) { 

     if(xValue > 0.9) 
     { 
      ////user currently has finger near right side of remote 
     } 

     if(xValue < -0.9) 
     { 
      ////user currently has finger near left side of remote 
     } 

     if(xValue == 0 && yValue == 0) 
     { 
      ////user released finger from touch surface 
     } 
    }; 
}]; 

Надеется, что это помогает кому-то.

+0

Это ПОМОЧНО поможет кому-то: ME :) Я пытаюсь сделать то же самое. Определенно пытаюсь это сделать! –

 Смежные вопросы

  • Нет связанных вопросов^_^