1

我无法将我的应用程序从 WatchOS 1 转换为 WatchOS2。我正在以编程方式在 iPhone 上创建一系列图像供 Watch 播放。

我将它们放在 iOS 中的一个 zip 文件中(使用 SSZipArchive),并transferFile()用于将其发送到手表,我在 Watch Extension 委托中将其解压缩到 Watch Extension 和 Watch App 之间的共享容器,Watch App 可以稍后播放序列:

func session(session: WCSession, didReceiveFile file: WCSessionFile) 
{
    imagesURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.com.xxxx.images")

    SSZipArchive.unzipFileAtPath(file.fileURL.path, toDestination:imagesURL!.path)
}

我检查了共享组设置是否正确,并且可以在共享目录(imagesURL!.path)中看到图像文件。

但是当我准备好播放序列时:

image.setImageNamed("myImages") // myImages0.png, myImages1.png, myImages2.png, etc.

我收到错误:无法在手表上找到名为“myImages”的图像

  • 我将图像放在正确的位置吗?
  • 我在 setImageNamed 中正确地引用了它们吗?
  • 我还缺少其他东西吗?
4

2 回答 2

1

如果您已经创建了一系列图像文件,正确的答案是使用 UIImage 的animatedImageNamed:duration:方法,然后使用setImage:方法设置该动画。

所以对我的原始代码的更正是一个简单的单行更改:

image.setImage( UIImage.animatedImageNamed("myImages", 3) ) // myImages0.png, myImages1.png, myImages2.png, etc.

(假设持续时间为 3 秒)

于 2016-07-02T03:23:36.883 回答
1

为什么 setImageNamed: 失败

根据WKInterfaceImage文档setImageNamed从手表应用程序包中加载图像。

只要有可能,将图像资源放在 Watch 应用程序包中的资产目录中(而不是在 WatchKit 扩展包中)。将它们放在 Watch 应用程序包中可以让您使用该setImageNamed:方法在运行时加载动画图像,从而简化加载过程。

要从 Watch 应用程序包中的图像加载动画图像序列,您必须正确命名图像资源并使用setImageNamed:此类的方法。

这就是setImageNamed:找不到图像的原因,因为它们不是与手表应用程序捆绑的静态资源。

如何加载动态动画图像

由于您的动画图像是动态的,因此由手表应用程序扩展处理。

对于动态生成的动画,使用animatedImageWithImages:duration:UIImage 的方法将动画组装到 WatchKit 扩展中,然后使用该setImage:方法设置该动画。

您需要首先使用animatedImageWithImages:duration:来组装您传输的动态动画图像,然后使用设置该动画setImage:

let animatedImages = UIImage.animatedImageWithImages(images, duration: 3)
image.setImage(animatedImages)

更新:

正如 Scotty 指出的那样,更好的解决方案是使用animatedImageNamed:duration:以避免需要创建图像数组!

于 2016-07-01T21:33:02.623 回答