WatchOS 2 - 为动画转移图像序列

时间:2016-07-01 14:19:27

标签: animation watch-os-2 wcsession wkimage

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

我将它们放在iOS中的zip文件中(使用SSZipArchive)并使用transferFile()将其发送到手表,我将其在Watch Extension委托中解压缩到Watch Extension和之间的共享容器中。观看应用程序,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中正确引用了它们?
  • 我错过了其他什么吗?

2 个答案:

答案 0 :(得分:1)

为什么setImageNamed:失败

根据WKInterfaceImage documentationsetImageNamed从观看应用包中加载图片。

  

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

     

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

这就是setImageNamed:无法找到图片的原因,因为它们不是与观看应用程序捆绑在一起的静态资源。

如何加载动态动画图片

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

  

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

您需要先使用animatedImageWithImages:duration:来组合您传输的动态动画图像,然后使用setImage:

设置该动画
let animatedImages = UIImage.animatedImageWithImages(images, duration: 3)
image.setImage(animatedImages)

<强>更新

As Scotty pointed out,更好的解决方案是使用animatedImageNamed:duration:来避免需要创建图像数组!

答案 1 :(得分:1)

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

因此,对原始代码的更正是一个简单的单行更改:

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

(假设持续时间为3秒)