2016-08-01 3 views
0

Я хотел был бы иметь возможность сохранить массив UIImage, созданный на Apple Watch с watchOS, и воспроизвести эту серию изображений в качестве анимации в качестве группового фона. Я могу создать массив изображений и воспроизвести его, но я не могу понять, как хранить/сохранять эти изображения, чтобы я мог их загрузить/загрузить при следующем запуске приложения, поэтому мне не нужно создавать их каждый раз, когда приложение запускается.Сохраните и загрузите основной графический массив UIImage на watchOS

Вот пример того, как я строю изображения с Core Graphics (Swift 3):

import WatchKit 
import Foundation 


class InterfaceController: WKInterfaceController 
{ 
    @IBOutlet var colourGroup: WKInterfaceGroup! 

    override func awake(withContext context: AnyObject?) 
    { 
     super.awake(withContext: context) 

    } 

    override func willActivate() 
    { 
     var imageArray: [UIImage] = [] 
     for imageNumber in 1...250 
     { 
      let newImage: UIImage = drawImage(fade: CGFloat(imageNumber)/250.0) 
      imageArray.append(newImage) 
     } 

     let animatedImages = UIImage.animatedImage(with:imageArray, duration: 10) 

     colourGroup.setBackgroundImage(animatedImages) 
     let imageRange: NSRange = NSRange(location: 0, length: 200) 
     colourGroup.startAnimatingWithImages(in: imageRange, duration: 10, repeatCount: 0) 

     super.willActivate() 
    } 

    func drawImage(fade: CGFloat) -> UIImage 
    { 
     let boxColour: UIColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: fade) 

     let opaque: Bool = false 
     let scale: CGFloat = 0.0 

     let bounds: CGRect = WKInterfaceDevice.current().screenBounds 

     let imageSize: CGSize = CGSize(width: bounds.width, height: 20.0) 


     UIGraphicsBeginImageContextWithOptions(imageSize, opaque, scale) 

     let radius: CGFloat = imageSize.height/2.0 

     let rect: CGRect = CGRect(x: 0.0, y: 0.0, width: imageSize.width, height: imageSize.height) 

     let selectorBox: UIBezierPath = UIBezierPath(roundedRect: rect, cornerRadius: radius) 

     let boxLineWidth: Double = 0.0 
     selectorBox.lineWidth = CGFloat(boxLineWidth) 
     boxColour.setFill() 
     selectorBox.fill() 

     // return the image 
     let result: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 
     return result 

    } 

    override func didDeactivate() 
    { 
     // This method is called when watch view controller is no longer visible 
     super.didDeactivate() 
    } 

} 

В основном я ищу способ сохранять и загружать [UIImage] таким образом, что я может использовать UIImage.animatedImage (с: [UIImage], продолжительность: TimeInterval) с массивом

Есть ли способ сохранить массив изображений, чтобы я мог загрузить его в следующий раз, когда запускаю приложение, а не восстанавливаю изображения?

Благодаря

Грег

ответ

0

NSKeyedArchiver и NSKeyedUnarchiver сделал трюк. Вот код Swift для XCode 8b4:

override func willActivate() 
{ 
    var imageArray: [UIImage] = [] 

    let fileName: String = "TheRings" 
    let fileManager = FileManager.default 
    let url = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! as NSURL 
    let theURL: URL = url.appendingPathComponent(fileName)! 


    if let rings = NSKeyedUnarchiver.unarchiveObject(withFile: theURL.path) as? [UIImage] 
    { 
     print("retrieving rings - found rings") 
     imageArray = rings 
    } 
    else 
    { 
     print("retrieving rings - can't find rings, building new ones") 

     for imageNumber in 1...250 
     { 
      let newImage: UIImage = drawImage(fade: CGFloat(imageNumber)/250.0) 
      imageArray.append(newImage) 
     } 
     NSKeyedArchiver.archiveRootObject(imageArray, toFile: theURL.path) 
    } 

    let animatedImages = UIImage.animatedImage(with:imageArray, duration: 10) 

    colourGroup.setBackgroundImage(animatedImages) 
    let imageRange: NSRange = NSRange(location: 0, length: 200) 
    colourGroup.startAnimatingWithImages(in: imageRange, duration: 10, repeatCount: 0) 

    super.willActivate() 
} 
Смежные вопросы