Siri 遥控器。方向箭头
Siri Remote. Directional Arrows
我在 Apple tvOS 上的默认 AVPlayerViewController 中发现了一种行为。如果你调出时间轴,你可以在其中快退或快进视频,然后如果你将手指放在触摸板的右侧,不要使用 SiriRemote,当前播放时间旁边会出现“10”标签
如果您在不按遥控器的情况下移开手指,“10”标签就会消失。
同理触摸遥控器左侧,只是“10”标签出现在当前播放时间的左侧。
问题是,我怎样才能收到这个事件的回调?用户将手指放在遥控器一侧的事件。
UPD
具有 allowedPressTypes=UIPressTypeRightArrow 的 UITapGestureRecognizer 将在用户从触摸表面释放手指后生成事件。我对用户触摸表面边缘(并且可能让手指静止)后立即生成的事件感兴趣
经过几天的搜索,我得出结论,UIKit 不会报告此类事件。但是可以使用 GameController
框架来拦截类似的事件。
Siri 遥控器表示为 GCMicroGamepad
。它有 属性
BOOL reportsAbsoluteDpadValues
应设置为 YES
。每次用户触摸表面时 GCMicroGamepad
都会更新 dpad
属性 的值。 dpad
属性 由 float x,y
值表示,每个值在 [-1,1]
范围内变化。这些值表示 Carthesian 坐标系,其中 (0,0)
是触摸表面的中心,(-1,-1)
是遥控器上靠近 "Menu" 按钮的左下角点,(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
}
};
}];
希望对大家有所帮助。
我在 Apple tvOS 上的默认 AVPlayerViewController 中发现了一种行为。如果你调出时间轴,你可以在其中快退或快进视频,然后如果你将手指放在触摸板的右侧,不要使用 SiriRemote,当前播放时间旁边会出现“10”标签
如果您在不按遥控器的情况下移开手指,“10”标签就会消失。
同理触摸遥控器左侧,只是“10”标签出现在当前播放时间的左侧。
问题是,我怎样才能收到这个事件的回调?用户将手指放在遥控器一侧的事件。
UPD
具有 allowedPressTypes=UIPressTypeRightArrow 的 UITapGestureRecognizer 将在用户从触摸表面释放手指后生成事件。我对用户触摸表面边缘(并且可能让手指静止)后立即生成的事件感兴趣
经过几天的搜索,我得出结论,UIKit 不会报告此类事件。但是可以使用 GameController
框架来拦截类似的事件。
Siri 遥控器表示为 GCMicroGamepad
。它有 属性
BOOL reportsAbsoluteDpadValues
应设置为 YES
。每次用户触摸表面时 GCMicroGamepad
都会更新 dpad
属性 的值。 dpad
属性 由 float x,y
值表示,每个值在 [-1,1]
范围内变化。这些值表示 Carthesian 坐标系,其中 (0,0)
是触摸表面的中心,(-1,-1)
是遥控器上靠近 "Menu" 按钮的左下角点,(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
}
};
}];
希望对大家有所帮助。