2015-12-04 117 views
3

我在tvOS上的Apple的默認AVPlayerViewController中發現了一個行爲。如果你打電話的時間表,在那裏你可以快退或快進視頻,然後如果你把並留下您的手指在觸摸板唐SiriRemote的右側旁邊顯示的當前播放時間的「10」的標籤Siri Remote。方向箭頭

Screenshot

如果您在未按遙控器的情況下取下手指,「10」標籤將消失。

與觸摸遙控器左側相同,僅在當前播放時間的左側出現「10」標籤。

問題是,我該如何接收此事件的回調?用戶將手指放在遙控器側面的事件。用戶釋放從觸摸表面的手指後

UPD

UITapGestureRecognizer與allowedPressTypes = UIPressTypeRightArrow將生成事件。我感興趣的事件將在用戶接觸到表面邊緣時立即產生(並且可能使手指擱置)

+0

這些將是[位置點擊](http://stackoverflow.com/a/32590064/2108547)。 –

+2

@DanielStorm,這很接近,但不完全是我在找的東西。具有allowedPressTypes = UIPressTypeRightArrow的UITapGestureRecognizer將在用戶從觸摸表面釋放手指後生成事件。 我很感興趣,只要用戶觸及表面的邊緣就會生成事件(並且可能會讓手指擱置) –

回答

7

經過幾天的搜索,我得出結論認爲UIKit不報告此類事件。但是可以使用GameController框架攔截類似的事件。 Siri遙控器被表示爲GCMicroGamepad。它有財產 BOOL reportsAbsoluteDpadValues應該設置爲YES。比每次用戶觸摸表面GCMicroGamepad都會更新它的dpad屬性的值。 dpad財產表示爲float x,y值各不相同的範圍[-1,1]。這些值表示Carthesian座標系,其中(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 :)我試圖做同樣的事情。絕望地嘗試了這一點! –