我无法将我的应用从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”的图片
答案 0 :(得分:1)
为什么setImageNamed:失败
根据WKInterfaceImage
documentation,setImageNamed
从观看应用包中加载图片。
尽可能将图片资源放入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秒)