gpt4 book ai didi

objective-c - 添加 CarPlay 用户界面

转载 作者:太空狗 更新时间:2023-10-30 03:44:49 25 4
gpt4 key购买 nike

我正在努力让 CarPlay 支持我当前的 iPhone 音频应用程序。我已经通过Apple 批准并获得了开发权,并观看了视频“Enabling Your App for CarPlay”( https://developer.apple.com/videos/play/wwdc2017/719/ )。视频中有一段 Swift 代码演示了如何添加 CarPlay UI:

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。

enter image description here

我的问题是:我应该怎么做才能让我的应用程序通过 CarPlay 连接?也就是说,我应该如何获得具有 UIUserInterfaceIdiomCarPlay 习惯用法的屏幕,而不仅仅是主屏幕?非常感谢。

最佳答案

CarPlay 音频应用程序由 MPPlayableContentManager 控制.您需要实现 MPPlayableContentDelegateMPPlayableContentDatasource协议(protocol),以便与 CarPlay 连接。 UI 由 CarPlay 控制 - 您需要做的就是为其提供标签和表格的数据(数据源)并响应可播放的项目(委托(delegate))。

关于objective-c - 添加 CarPlay 用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com