如何创建基于页面的 WatchKit 应用程序?

Posted

技术标签:

【中文标题】如何创建基于页面的 WatchKit 应用程序?【英文标题】:How to create a page based WatchKit app? 【发布时间】:2015-03-08 22:39:29 【问题描述】:

我正在尝试创建一个基于页面的 WatchKit 应用。当应用程序加载时,我希望在分页视图中有一个带有图像和按钮的页面,并且滑动应该在图像数组之间切换。

https://www.dropbox.com/s/yn3tstngx8h94xo/ios%20Simulator%20Screen%20Shot%20-%20Apple%20Watch%2009-Mar-2015%203.28.01%20am.png?dl=0

我试过WKInterfaceController.reloadRootControllersWithNames(["home", "home", "home", "home", "home"], contexts: ["1", "2", "3", "4", "5"]),其中home 是InterfaceController 的标识符。我从另一个 InterfaceController 调用此方法,它是初始接口控制器。我得到基于页面的视图,但初始视图是空白的。

    import WatchKit
    import Foundation

    class InterfaceController: WKInterfaceController 

        override func awakeWithContext(context: AnyObject?) 
            super.awakeWithContext(context)

            WKInterfaceController.reloadRootControllersWithNames(["home", "home", "home", "home", "home"], contexts: ["1", "2", "3", "4", "5"])
        

        override func willActivate() 
            // This method is called when watch view controller is about to be visible to user
            super.willActivate()
        

        override func didDeactivate() 
            // This method is called when watch view controller is no longer visible
            super.didDeactivate()
        
    
    使用reloadRootControllersWithNames 方法创建基于页面的应用程序是否正确? 我应该在哪里调用这个方法? 除了情节提要中的箭头之外,是否有类似 AppDelegate 的 WatchKit 入口点文件? 我可以在情节提要本身中配置分页视图而不编写单独的代码吗? 现在我的整个视图都是分页的。我只想改变图像,我不希望按钮移动。我怎样才能做到这一点? http://www.apple.com/watch/films/#film-fitness 请查看此视频。我想要他们在 02:17 在这里显示的分页。 最后一件事是他们所做的动画。他们为文本和练习环显示的动画。如果有人能告诉我如何制作这样的动画,我将不胜感激。 :)

【问题讨论】:

你不应该同时在 Objective c 和 swift 中编码,选择其中一个标签:) @penne12 我只是想让更多人看到我的问题,我认为 Objective-c 标签会有所帮助;)我的 Parent 应用程序是用 Objective-C 编写的。对于 WatchKit 扩展,我应该更喜欢 Objective-C 还是 Swift? 你最喜欢什么 :) 我认为是 Swift,但你应该探索你的选择 :) 【参考方案1】:

只回答问题 1:

我创建了一个基于页面的应用程序,使用的技术几乎与您在此处使用的技术完全相同,只是我调用了 WKInterfaceController.reloadRootControllersWithNames() 来自 willActivate() 函数,而不是 awakeWithContext() 函数。不确定这是否重要。

我假设“home”是不同 WKInterfaceController 的标识符?如果您尝试将起始界面控制器用作分页界面控制器,我认为它不会正常工作。所以这可能是你问题的根源。

但是,仅当您拥有可变数量的页面时,才需要这种以编程方式指定页面的方法。如果您在构建时知道您的页面布局,则可以将它们全部放在情节提要中,然后按住 Control 并拖动另一个,选择“下一页”关系。

如果您使用情节提要执行此操作,则可以将起始界面控制器作为页面的第一个,然后后续界面控制器可以根据需要使用相同的类。

【讨论】:

感谢您的回答:)。我实际上已经在“awakeWithContext”方法中实现了它。我只是想重用视图,因为所有分页视图的布局都是相同的,只是数据发生了变化。我想我现在已经完成了 UI 和动画。但是Watch和iPhone之间的数据传输是我现在需要实现的。我一直在检查 Apple 的 Lister 应用程序。 developer.apple.com/library/ios/samplecode/Lister/Introduction/…希望我能尽快解决这个问题。请分享您对如何在 Watch 和 iPhone 之间进行有效通信的想法。 查看这篇文章:fiveminutewatchkit.com/blog/2015/3/11/…【参考方案2】:

#2 和#3 的答案很简单:你不能,至少在当前版本的 WatchKit 中不能。

【讨论】:

锻炼环可以使用图像动画来完成。不确定文字动画是否可行。 您可以在来自苹果developer.apple.com/library/ios/samplecode/Lister/Introduction/…的示例代码中看到动画环的示例实现。

以上是关于如何创建基于页面的 WatchKit 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

WatchKit 扩展:基于页面的层次结构,一目了然

是否需要 Watchkit 应用程序才能在 Apple Watch 上显示应用程序的远程通知?

IOS开发:WatchKit的应用程序要点

如何使用 WatchKit 更新 UI?

如何下载 WatchKit? [关闭]

WatchKit:从 Long Look 切换?