Siri Remote。定向箭头

时间:2015-12-04 14:45:44

标签: uigesturerecognizer tvos siri-remote

我在Apple的tvOS默认AVPlayerViewController中发现了一种行为。如果你打电话给时间轴,在那里你可以倒带或快进视频,然后如果你把手指放在触摸板的右侧,请不要SiriRemote" 10"标签出现在当前播放时间旁边

Screenshot

如果您在没有按遥控器的情况下移开手指," 10"标签消失。

同样触摸遥控器的左侧,只需触摸" 10"标签出现在当前播放时间的左侧。

问题是,如何才能收到此次活动的回调?用户将手指放在遥控器一侧的事件。

UPD

带有allowedPressTypes = UIPressTypeRightArrow的UITapGestureRecognizer将在用户从触摸表面释放手指后生成事件。我对用户触摸表面边缘时会产生的事件感兴趣(可能会让手指休息)

1 个答案:

答案 0 :(得分: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
        }
    };
}];

希望它对某人有帮助。