tvOS 如何检测是旧的 Apple TV Siri Remote(第一代)还是新的 Apple TV 遥控器(第二代和第三代)

问题描述 投票:0回答:1

所以现在市场上有很多用户在使用第一代 Apple TV 遥控器和带有 D-Pad 可点击的新遥控器。

识别您的 Apple TV 遥控器

如何区分两个遥控器,如果是新命令我想停用触摸区域并且只使用D-Pad,这对经典游戏来说更好。但要做到这一点,我需要找出它是哪个版本。 有谁知道怎么知道这个?

询问供应商,我只是得到“远程”! -_-'

print(microGamepad.controller?.vendorName)
print(microGamepad.device?.vendorName)
//Optional("Remote")
//Optional("Remote")
swift tvos apple-tv
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.