我正在开发我的当前iPhone音频应用,以支持CarPlay。我已经获得了苹果公司的批准并收到了开发权限,并观看了视频“启用您的应用程序以供CarPlay使用”(https://developer.apple.com/videos/play/wwdc2017/719/)。在视频中,有一段Swift代码演示如何添加CarPlay UI:
然而我发现UIScreen的属性“screens”始终只返回1个元素(主屏幕),无论在真实设备还是模拟器上测试。因此,当我的应用程序在模拟器或带有CarPlay系统的真实汽车上运行时,应用程序只是空白,并显示“无法连接到“我的应用程序名称””(见下图)。尽管我的ViewController有一个简单的UILabel。 我的问题是:我应该怎么做才能让我的应用程序连接到CarPlay?也就是说,我应该如何获取具有UIUserInterfaceIdiomCarPlay风格的屏幕,而不仅仅是主屏幕?非常感谢。
func updateCarWindow()
{
guard let screen = UIScreen.screens.first(where:
{ $0.traitCollection.userInterfaceIdiom == .carPlay })
else
{
// CarPlay is not connected
self.carWindow = nil;
return
}
// CarPlay is connected
let carWindow = UIWindow(frame: screen.bounds)
carWindow.screen = screen
carWindow.makeKeyAndVisible()
carWindow.rootViewController = CarViewController(nibName: nil, bundle: nil)
self.carWindow = carWindow
}
我将其重写为Objective-C版本,如下所示:
- (void) updateCarWindow
{
NSArray *screenArray = [UIScreen screens];
for (UIScreen *screen in screenArray)
{
if (screen.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomCarPlay) // CarPlay is connected.
{
// Get the screen's bounds so that you can create a window of the correct size.
CGRect screenBounds = screen.bounds;
UIWindow *tempCarWindow = [[UIWindow alloc] initWithFrame:screenBounds];
self.carWindow.screen = screen;
[self.carWindow makeKeyAndVisible];
// Set the initial UI for the window.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"VC"];
self.carWindow.rootViewController = rootViewController;
self.carWindow = tempCarWindow;
// Show the window.
self.carWindow.hidden = NO;
return;
}
}
// CarPlay is not connected.
self.carWindow = nil;
}
然而我发现UIScreen的属性“screens”始终只返回1个元素(主屏幕),无论在真实设备还是模拟器上测试。因此,当我的应用程序在模拟器或带有CarPlay系统的真实汽车上运行时,应用程序只是空白,并显示“无法连接到“我的应用程序名称””(见下图)。尽管我的ViewController有一个简单的UILabel。 我的问题是:我应该怎么做才能让我的应用程序连接到CarPlay?也就是说,我应该如何获取具有UIUserInterfaceIdiomCarPlay风格的屏幕,而不仅仅是主屏幕?非常感谢。