2016-07-01 4 views
1

У меня возникли проблемы с преобразованием моего приложения из WatchOS 1 в WatchOS2. Я программно создаю последовательность изображений на iPhone для Watch to play.WatchOS 2 - Передача последовательностей изображений для анимации

Я помещаю их в zip-файл (используя SSZipArchive) в iOS и используя transferFile(), чтобы отправить его на часы, где я разархивирую его в делегате Watch Extension на общий контейнер между Watch Extension и Watch App, что часы 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?
  • Я пропустил что-то еще?

ответ

1

Почему setImageNamed: не удается

Согласно WKInterfaceImage documentation, setImageNamed загружает изображение из приложения часы пучка.

Whenever possible, place image resources in an asset catalog in your Watch app bundle (not in your WatchKit extension’s bundle). Placing them in the Watch app bundle lets you use the setImageNamed: method to load the animated image at runtime, which simplifies the loading process.

To load an animated image sequence from images in your Watch app bundle, you must name your image resources appropriately and use the setImageNamed: method of this class.

Вот почему setImageNamed: не могут найти изображения, так как они не являются статическими ресурсами в комплекте с приложением часов.

Как загрузить динамическую анимированное изображение

Поскольку ваши анимационные изображения являются динамическими, это осуществляется расширение часы приложения.

For animations you generate dynamically, use the animatedImageWithImages:duration: method of UIImage to assemble your animation in your WatchKit extension, and then set that animation using the setImage: method.

Вы должны сначала использовать animatedImageWithImages:duration: собрать динамический анимированное изображение перенесенных, а затем установить эту анимацию, используя setImage:

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

Update:

As Scotty pointed out, лучшим решением является используйте animatedImageNamed:duration:, чтобы избежать необходимости создания массива изображений!

+0

Спасибо за отправку меня в правильном направлении. Однако я понял, что то, что я должен делать, это создать анимированный UIImage на телефоне, а затем отправить его напрямую (например: http://stackoverflow.com/questions/29515599/how-to-pass-uiimage-from- iphone-приложение к яблочному-сторожевому приложению). Я неправильно пытался использовать старый подход Watch OS 1 с файлами изображений. Это объясняет, почему никто (кроме меня) не говорит об использовании файлов изображений для анимации с Watch OS 2! На самом деле, я думаю, об этом говорится в руководстве по конверсии Apple Watch OS 2, которое, как представляется, больше не доступно в Интернете. – ScottyB

1

Правильный ответ заключается в использовании animatedImageNamed: длительность: метода UIImage, если у вас есть ряд графических файлов, уже созданные, а затем установить анимацию с помощью setImage: метод.

Так поправка к моему первоначальному коду простое изменение одной строки:

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

(предполагая, что продолжительность составляет 3 секунды)