标签: watchkit

如何从我的WatchKit应用程序在iPhone上打开父应用程序?

我正在尝试打开Apple Watch应用程序的父应用程序.

在Xcode Beta 2中,我们可以使用以下代码:

WKInterFaceController.openParentApplication
Run Code Online (Sandbox Code Playgroud)

但是,在Xcode beta 3中,我再也找不到代码了.现在我不知道如何从watch app打开父应用程序.请帮忙.

swift xcode6 watchkit

7
推荐指数
2
解决办法
6371
查看次数

使用基于页面的导航在watchkit中将数组数据从一个接口传递到另一个接口?

我正在研究Apple手表.我试图InterfaceController使用PageBasedNavigationin 将数组数据从一个传递到另一个watch-kit.那么任何人都可以建议我如何在以watch-kit编程方式滑动表格的同时传递数组?

对于创建基于页面的界面,请按照以下步骤操作:

  1. 在我的故事板中,为界面中的每个页面添加界面控制器.

  2. 按住Control键并单击应用程序的主界面控制器并拖动到另一个界面控制器.

  3. 第二个接口控制器应突出显示,表示segue是可能的.

  4. 释放鼠标按钮.

  5. 从关系segue面板中选择下一页.

使用相同的技术,从每个接口控制器创建segue到下一个.

objective-c uinavigationcontroller ios watchkit

7
推荐指数
1
解决办法
3309
查看次数

核心数据将数据移动到共享容器中

我有一个已发布的应用程序,它使用核心数据.
现在我想添加对手表套件和今天扩展的支持.

我需要将核心数据移动到共享容器中,而不会丢失以前用户保存的数据,我该如何以最佳方式执行此操作?

iphone xcode core-data watchkit today-extension

7
推荐指数
1
解决办法
1295
查看次数

Apple Watch:从Notification Center打开时,未显示动态Long Look

我在Apple Watch上实现了自定义动态 Long Look for push通知.当我在收到推送通知后立即抬起手臂时,这种动态长镜头显示正确.但是,如果我稍后回复,并点击Watch上通知中心内的推送通知,则只会显示静态长视图.

这是正常行为还是我做错了什么?你的动态长期表现如何?


为清楚起见,这里是重现步骤.

这将带来动态的长期外观:

  1. 我收到了关于Watch的推送通知
  2. 我立刻抬起手臂看到推动力

但这只会带来静态的长期外观:

  1. 我收到了关于Watch的推送通知
  2. 首先忽略它.一分钟后激活手表
  3. 从Watch面的顶部向下拖动以显示Notification Center
  4. 点击忽略的推送

notifications ios apple-watch watchkit

7
推荐指数
1
解决办法
743
查看次数

使用watchOS 2在Apple Watch上渲染折线图

我试图使用watchOS 2在Apple Watch上渲染线条/步骤图.与iOS 9不同,watchOS 2不支持Quartz.它只支持Core Graphics.我尝试编写一些代码来绘制折线图但我得到一个错误"CG​​ContextRestoreGState:无效的上下文0x0.这是一个严重的错误.这个应用程序,或它使用的库,正在使用无效的上下文,从而有助于整体系统稳定性和可靠性降低.这个通知是礼貌的:请解决这个问题.在即将到来的更新中它将成为一个致命错误."

以下是我使用的代码:

import WatchKit
import Foundation
import UIKit

class InterfaceController: WKInterfaceController{
    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        let path = UIBezierPath()
        let startPoint =  CGPointMake(0.0, 0.0)
        path.moveToPoint(startPoint)
        let nextPoint = CGPointMake(20.0, 20.0)
        path.addLineToPoint(nextPoint)
        path.lineWidth = 1.0
        UIColor.whiteColor().setStroke()
        path.stroke()
    }

    override func willActivate() {
        super.willActivate()

    }

    override func didDeactivate() {
        super.didDeactivate()
    }
}
Run Code Online (Sandbox Code Playgroud)

我的最终结果应该像Apple Watch上的Stocks app一样.每当用户点击特定股票时,他将能够查看/可视化该股票的统计数据.任何人都可以帮助我实现这一目标.

ios swift watchkit watchos-2

7
推荐指数
1
解决办法
5474
查看次数

没有从父应用程序发送到Watch应用程序的数组

我试图从一个父应用程序接收一个对象数组(从应用程序中的Parse中检索),以显示在监视应用程序中.我一直在尝试一些不同的事情,但没有成功.

这是扩展中的代码:

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

    var parkPassed = context as! String
    openParentAppWithPark(parkPassed)        
}

private func openParentAppWithPark(park: String) {
    WKInterfaceController.openParentApplication(["request": park], reply: { (reply, error) -> Void in
        println(reply)
    })
}
Run Code Online (Sandbox Code Playgroud)

以及父应用中的代码:

func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {
        println("Test")

        if let userInfo = userInfo, request = userInfo["request"] as? NSArray {
            if request == "Park 1" {
                DataManager.sharedInstance.loadRides("Park 1")
            } else if request == "Park 2" {
                DataManager.sharedInstance.loadRides("Park 2")
            } …
Run Code Online (Sandbox Code Playgroud)

ios swift apple-watch watchkit

7
推荐指数
1
解决办法
146
查看次数

WCSessionDelegate:sessionDidBecomeInactive和sessionDidDeactivate已被标记为不可用,但是是必需的

我刚刚使用Xcode 8的转换功能将Swift 2应用程序转换为Swift 3.

我的代码有一个标记为的类WCSessionDelegate.

在Swift 2中,它编译时没有方法sessionDidBecomeInactivesessionDidDeactivate.

如果我编译Swift 3版本,编译器会抱怨我的类不符合协议WCSessionDelegate,这显然是正确的.
然后它提供插入两个函数的存根:

public func sessionDidBecomeInactive(_ session: WCSession) { }  
public func sessionDidDeactivate(_ session: WCSession) { }
Run Code Online (Sandbox Code Playgroud)

插入这些存根后,会报告以下错误:

Cannot override 'sessionDidBecomeInactive' which has been marked unavailable  
Cannot override 'sessionDidDeactivate' which has been marked unavailable  
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

watchkit wcsession swift3 xcode8

7
推荐指数
1
解决办法
1812
查看次数

尝试在watchOS中进行后台刷新时,不会调用WKURLSessionRefreshBackgroundTask

我正在研究从Web服务获取计划数据的复杂性.每20-30分钟(或手动),我正在安排WKRefreshBackgroundTask来执行此操作.

正如Apple所建议的那样,我希望操作系统能够通过后台处理这些数据NSURLSession.

这是我用来下载我需要的数据的功能:

func scheduleURLSession()
{
    print("\nScheduling URL Session...")

    let backgroundSessionConfig:URLSessionConfiguration = URLSessionConfiguration.background(withIdentifier: NSUUID().uuidString)
    backgroundSessionConfig.sessionSendsLaunchEvents = true

    let backgroundSession = URLSession(configuration: backgroundSessionConfig)

    let downloadTask = backgroundSession.downloadTask(with: URL(string: "https://www.myserver.com/somedata")!)
    downloadTask.resume()
}
Run Code Online (Sandbox Code Playgroud)

关于这个的一些事情:

  1. 它在我安排时会被调用.我在控制台中看到了它的print语句.
  2. 它与Apple的例子几乎完全相同.
  3. 我省略了这个网址.同样的URL在iOS/watchOS应用程序中工作得很好,所以没有任何问题.

问题是,即使我正在调用resume()该任务并允许它在完成时唤醒我的应用程序,它似乎也没有.

完成后,它应该回到WKExtensionDelegate处理程序:

func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)
Run Code Online (Sandbox Code Playgroud)

作为一个WKURLSessionRefreshBackgroundTask,但它没有.

我的代码与Apple的示例代码相同,然后创建另一个会话,但通过WKURLSessionRefreshBackgroundTask标识符重新加入它.这是设置委托以处理下载数据的位置.检查代码:

func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
    for task in backgroundTasks {
        switch task {

        case let backgroundTask as WKApplicationRefreshBackgroundTask:
            print("\nWatchKit - WKApplicationRefreshBackgroundTask")
            // self.updateComplicationDataArrivalTimes(backgroundTask)
            self.scheduleURLSession()
            backgroundTask.setTaskCompleted()

        case let snapshotTask as WKSnapshotRefreshBackgroundTask: …
Run Code Online (Sandbox Code Playgroud)

nsurlsession watchkit watchos watchos-3 wkrefreshbackgroundtask

7
推荐指数
2
解决办法
2017
查看次数

watchOS 5:HKLiveWorkoutBuilder,HKWorkoutRouteBuilder和Workout Distance

我正在使用HKLiveWorkoutBuilder&HKWorkoutRouteBuilder跟踪Apple Watch上的锻炼.

打电话时:

[workoutBuilder finishWorkoutWithCompletion:^(HKWorkout * _Nullable workout, NSError * _Nullable error) {

}];
Run Code Online (Sandbox Code Playgroud)

返回的workout对象不包括用户行进的距离:

(lldb) po workout.totalDistance
nil
Run Code Online (Sandbox Code Playgroud)

但是路线保存正确.

鉴于这.totalDistance是只读的,我应该如何在watchOS 5中设置锻炼的距离?

在此输入图像描述

在此输入图像描述

healthkit watchkit watchos-5

7
推荐指数
1
解决办法
447
查看次数

你如何使用resizeAspectFill在watchOS上播放视频?

在watchOS应用中播放视频.

WKInterfaceMovie - 一个界面元素,可让您在watchOS应用程序中播放视频和音频内容.


按预期工作.视频播放.如何缩放它以填满屏幕

  1. 故事板中有一个可视化选项.选择调整大小宽高比填充将被忽略.

Xcode的屏幕截图

  1. 有一个功能: func setVideoGravity(_ videoGravity: WKVideoGravity)

电影的大小调整选项.有关可能值的列表,请参阅WKVideoGravity类型.


import WatchKit
import Foundation

class InterfaceController: WKInterfaceController {
    @IBOutlet weak var movieView: WKInterfaceMovie!

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        setupVideoPlayer()
    }

    func setupVideoPlayer() {
        guard let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") else {
            return
    }

        movieView.setMovieURL(videoURL)
        movieView.setVideoGravity(.resizeAspectFill)
    }
}
Run Code Online (Sandbox Code Playgroud)

Xcode中的基本设置.轻触播放按钮时视频加载.加载后播放.不填充屏幕.


WKVideoGravity

表示视频内容外观的常量.

case resizeAspectFill
Run Code Online (Sandbox Code Playgroud)

调整内容的大小以完全填充边界矩形,同时保留内容的原始宽高比.此选项会导致视频边缘超出其裁剪范围.

那很完美.我们来试试吧.


它不起作用.

无论videoGravity(在故事板或代码中),视频播放都会调整大小以适应,只有在我点按两次时才会填满屏幕.

我错过了什么?


另外,如果我presentMediaPlayerController使用Media Player Options 探索该方法,我会注意到一种奇怪的行为:

WKMediaPlayerControllerOptionsAutoplayKey

• …

video movie ios watchkit watchos

7
推荐指数
1
解决办法
301
查看次数