Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用Watch连接传输UIImage_Ios_Swift_Swift2_Watchkit_Watchos 2 - Fatal编程技术网

Ios 如何使用Watch连接传输UIImage

Ios 如何使用Watch连接传输UIImage,ios,swift,swift2,watchkit,watchos-2,Ios,Swift,Swift2,Watchkit,Watchos 2,如何将UIImage通过WatchConnecitivity从iPhone传输到Apple Watch,而无需在手机上进行任何用户交互,并且仅因手表以编程方式调用而加载。我之所以需要它,是因为创建UIImage的图像处理使用了Watchkit API中不可用的逻辑,因此它必须从手机中创建。我看到了一些手表连接的例子,使用: func startSession() { session?.delegate = self session?.activateSession() } 然而

如何将
UIImage
通过WatchConnecitivity从iPhone传输到Apple Watch,而无需在手机上进行任何用户交互,并且仅因手表以编程方式调用而加载。我之所以需要它,是因为创建
UIImage
的图像处理使用了Watchkit API中不可用的逻辑,因此它必须从手机中创建。我看到了一些手表连接的例子,使用:

func startSession() {
    session?.delegate = self
    session?.activateSession()
}

然而,我对watch kit还不熟悉,对如何使用这个会话管理器感到困惑,尤其是如何从手表转到设备,而不是像我在apple文档中看到的那样从手表转到设备。有人能举例说明如何在手表和手机上进行此操作,以便通过手表在手机上拨打
UIImage

您必须将图像作为NSData传输,然后在手表一侧对其进行解码。你们可以看看我的博客文章,在那里我报道了类似的案例。


这不是会话的方式,因为我当时没有意识到,但它可能会帮助您了解整个逻辑

要在iPhone和Apple Watch之间传输文件,您应该使用Watch连接,使用
WCSession
正确处理通信。您可以使用
wcsessionelegate
didReceiveMessageData
委托方法将
UIImage
作为
NSData
发送

您应该知道的第一件事是将
UIImage
转换为
NSData
,反之亦然。您可以使用以下代码执行此操作:

如果PNG图像

let image = UIImage(named: "nameOfYourImage.jpg")
let data = UIImagePNGRepresentation(image)
let image = UIImage(named: "nameOfYourImage.jpg")
let data = UIImageJPEGRepresentation(image, 1.0)
如果JPG图像

let image = UIImage(named: "nameOfYourImage.jpg")
let data = UIImagePNGRepresentation(image)
let image = UIImage(named: "nameOfYourImage.jpg")
let data = UIImageJPEGRepresentation(image, 1.0)
然后,您可以使用
WCSession
以如下方式发送消息:

ViewController.swift

InterfaceController.swift

在上面的代码中,当您打开
ViewController
时,它会发送
UIImage
,上面的示例仅用于学习目的,考虑到项目的复杂性,您必须以更合适的方式处理它


我希望这对您有所帮助。

在InterfaceController中,如果您使用WCSessionDelegate,请记住扩展方法ActivationIDCompletewith:

func session(_ session: WCSession, activationDidCompleteWith  
  activationState: WCSessionActivationState, error: Error?) {

  }

是的,openParentApplication在OS2中不可用,但我想我可以解决这个问题。
sendMessageData
从手机到手表只有在手表上的手表应用处于活动状态时才能工作。如果watch应用程序未运行,数据将丢失。使用
tranferUserInfo
会更安全,它将对数据进行排队,并在下次激活时被watch应用程序读取。如果您只对发送给手表的最新图像感兴趣,请使用“updateApplicationContext”。而且,这两种交流方式都是在后台进行的,如果您正在传输大量数据,这可能是可取的。是的@Drewf you's right
transferUserInfo
在苹果手表无法访问的情况下更合适,因为该软件包是在后台交付的,但在后台队列中,当它被发送多次时,更换会带来不便。尽管如此,我还是会为每种情况更新更多的信息。如果你可以通过压缩质量<1.0来减少网络流量,那么JPEG压缩质量<1.0是值得尝试的。