从WatchKit上的URL加载图像

fab*_*ian 10 swift apple-watch watchkit

是否有更优雅的解决方案在手表上加载外部图像而不是以下?

let image_url:String = "http://placehold.it/350x150"

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    let url:NSURL = NSURL(string:image_url)!
    var data:NSData = NSData(contentsOfURL: url)!
    var placeholder = UIImage(data: data)!

    // update ui
    dispatch_async(dispatch_get_main_queue()) {
        self.imageView.setImage(placeholder)
    }
}
Run Code Online (Sandbox Code Playgroud)

Fok*_*gen 15

NSURL旨在用于本地文件.而是使用NSURLSession.设置远程图像的比例也很有用.

import WatchKit

public extension WKInterfaceImage {

    public func setImageWithUrl(url:String, scale: CGFloat = 1.0) -> WKInterfaceImage? {

        NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) { data, response, error in
            if (data != nil && error == nil) {
                let image = UIImage(data: data!, scale: scale)

                dispatch_async(dispatch_get_main_queue()) {
                    self.setImage(image)
                }
            }
        }.resume()

        return self
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它

self.imageView.setImageWithUrl(image_url, scale: 2.0)
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.除非您使用NSURLSession,否则图像不会显示在设备上.+1 (3认同)

fab*_*ian 7

这是类别

import WatchKit

public extension WKInterfaceImage {

    public func setImageWithUrl(url:String) -> WKInterfaceImage? {

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
            let url:NSURL = NSURL(string:url)!
            var data:NSData = NSData(contentsOfURL: url)!
            var placeholder = UIImage(data: data)!

            dispatch_async(dispatch_get_main_queue()) {
                self.setImage(placeholder)
            }
        }

        return self
    }

}
Run Code Online (Sandbox Code Playgroud)

像这样使用它

 self.imageView.setImageWithUrl(image_url)
Run Code Online (Sandbox Code Playgroud)


Hie*_*ham 5

我认为这个解决方案很好,因为当你试图从网上加载一些图像时,它可以帮助你的应用程序摆脱困境.你可以创建一个像这样的新函数:

func loadImage(url:String, forImageView: WKInterfaceImage) {
// load image
    let image_url:String = url
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
        let url:NSURL = NSURL(string:image_url)!
        var data:NSData = NSData(contentsOfURL: url)!
        var placeholder = UIImage(data: data)!

// update ui
        dispatch_async(dispatch_get_main_queue()) {
            forImageView.setImage(placeholder)
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

在那之后你想从urlString加载图片的任何地方你可以像这样使用:

loadImage("http://...", forImageView: self.myImageView)
Run Code Online (Sandbox Code Playgroud)

希望这有帮助.