我在tvOS上的Apple默认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 } }; }];
希望它对某人有帮助.