所以现在市场上有很多用户在使用第一代 Apple TV 遥控器和带有 D-Pad 可点击的新遥控器。
如何区分两个遥控器,如果是新命令我想停用触摸区域并且只使用D-Pad,这对经典游戏来说更好。但要做到这一点,我需要找出它是哪个版本。 有谁知道怎么知道这个?
询问供应商,我只是得到“远程”! -_-'
print(microGamepad.controller?.vendorName)
print(microGamepad.device?.vendorName)
//Optional("Remote")
//Optional("Remote")
GCController
有一个属性叫microGamepad
每个游戏手柄都被分解成核心elements
v2 Siri遥控器上的元素数超过10(我不记得确切的数字,我几个月前写了这段代码)我们可以使用这些信息来确定有问题的 Siri 遥控器是否是 v2+
我在
GCController
中添加一个扩展来确定这些信息。
斯威夫特:
extension GCController {
class func siriRemote() -> GCController? { //there can be only one Siri Remote paired at a time, so returning a single item is fine
if kCFCoreFoundationVersionNumber < 1665.15 {
let gcc = GCController.controllers().filter { controller in
controller.vendorName == "Remote"
}
return gcc.last
}
let gcc = GCController.controllers().filter { controller in
controller.productCategory == "Siri Remote"
}
return gcc.last
}
class func hasV2SiriRemote() -> Bool {
if let sr = self.siriRemote() {
return sr.isV2SiriRemote()
}
return false
}
func isV2SiriRemote() -> Bool {
if kCFCoreFoundationVersionNumber < 1775.118 { //anything under 14.5 cant even pair the V2 siri remote
return false
}
if self.productCategory == "Siri Remote" {
let microGP = self.microGamepad
if let elementCount = microGP?.elements.count { //Note: 'elements' for GCMicroGamepad is tvOS 14+ only.
return elementCount > 10
}
}
return false
}
}
ObjC:
#import <GameController/GameController.h>
@interface GCController (siri)
+(GCController *)siriRemote;
-(BOOL)isV2SiriRemote;
+(BOOL)hasV2SiriRemote;
@end
@implementation GCController (siri)
+(GCController *)siriRemote {
if (kCFCoreFoundationVersionNumber < 1665.15) {
return [[[GCController controllers] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"vendorName == %@", @"Remote"]] lastObject];
}
return [[[GCController controllers] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"productCategory == %@", @"Siri Remote"]] lastObject];
}
- (BOOL)isV2SiriRemote {
if (kCFCoreFoundationVersionNumber < 1775.118) { //anything under 14.5 cant even pair the V2 siri remote
return false;
}
if ([[self productCategory] isEqualToString:@"Siri Remote"]){
GCMicroGamepad *microGP = [self microGamepad];
if ([microGP respondsToSelector:@selector(elements)]){
if ([microGP elements].count > 10) {
return true;
}
}
}
return false;
}
+(BOOL)hasV2SiriRemote {
return [[self siriRemote] isV2SiriRemote];
}
@end