我想在我的可可应用程序中显示动画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图像。我如何让它工作?
答案 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)
假设您在universe
和Assets.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)