使用NSImageView显示GIF图像

时间:2016-05-11 18:29:53

标签: swift cocoa

我想在我的可可应用程序中显示动画gif图像。

我将gif拖入XCode中的Assets.xcassets。我希望NSImageView可以开箱即用,所以我尝试了以下代码。

let imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 512, height: 512))
imageView.canDrawSubviewsIntoLayer = true
imageView.imageScaling = .ScaleNone
imageView.animates = true
imageView.image = NSImage(named: "loading-animation")

window.contentView?.addSubview(imageView)

图像未显示。上面的代码适用于png图像。我如何让它工作?

4 个答案:

答案 0 :(得分:4)

对我而言,只有在“属性”检查器中没有设置任何内容并且使用类似的代码时(希望,它对某人有用),它才有效:

class FirstViewController: NSViewController {  

  @IBOutlet weak var imgImage1: NSImageView!

 override func viewDidLoad() {
        super.viewDidLoad()

let imgImage1 = NSImageView(frame: NSRect(x: 407, y: 474, width: 92, height: 74))
        imgImage1.canDrawSubviewsIntoLayer = true
        imgImage1.imageScaling = .scaleProportionallyDown
        imgImage1.animates = true
        imgImage1.image = NSImage(named: "mygif")
        self.view.addSubview(imgImage1)
}

享受:)

答案 1 :(得分:1)

回答我自己的问题。

当我从网址获取gif时,我能够在我的应用中制作一个gif显示器。

imageView.image = NSImage(byReferencingURL: yourgifurl)

所以,我认为将图像复制到项目中的方式有​​问题。而不是将图像放在Assets.xcassets中,我把它与其余的源代码放在一起,gif显示:)(但动画速度似乎很慢)

答案 2 :(得分:0)

假设您在universeAssets.xcassets中有一个名为NSImageView的动画gif资源,该资源由名为target的IBOutlet连接:

...
@IBOutlet weak var target: NSImageView!
...

func applicationDidFinishLaunching(_ aNotification: Notification) {
    ...
    target.animates = true
    target.image = NSImage(data: NSDataAsset(name: "universe")!.data)
    ...
}

注意:

target.image = NSImage(named: "universe") // WILL NOT WORK!

答案 3 :(得分:0)

Xcode 12

  1. 只需在您的项目中添加gif文件(不在资产中)
  2. 在视图控制器中添加一个NSImageView。
  3. 在情节提要中将图像名称设置为gif文件名。
  4. 点击“ Animates”属性。

enter image description here