如何使用 xcassets 构建框架
How to build framework with xcassets
我尝试用它自己的图像构建一个框架,它编译得很好。但是,当我将我的框架包含在另一个项目中时,它在加载图像时崩溃了,知道吗?
ImageTest(我的框架)
public class ImageTest {
open func getImage() {
return #imageLiteral(resourceName: "IMG_0745")
}
}
我的项目
import ImageTest
...
...
override func viewDidLoad() {
super.viewDidLoad()
let imageView = UIImageView(image: ImageTest.getImage()) // crash !
imageView.center = view.center
view.addSubview(imageView)
}
图像在 ImageTest 框架中。当您执行此代码 return #imageLiteral(resourceName: "IMG_0745")
时,它会查看 ImageTest 项目的 Image.xcassets,当它在那里找不到图像时,就会导致崩溃。
更改您的代码以使用 init function
的捆绑参数
open func getImage() {
return UIImage(named:"IMG_0745", bundle:Bundle(for: self), compatibleWith:nil)
}
在 Swift 4 现在是
UIImage(named: "IMG_0745", in: Bundle(for:self), compatibleWith: nil)
在Swift5,
UIImage(named: "IMG_0745", in: Bundle(for: xxxYourViewController.self), compatibleWith: nil)
我尝试用它自己的图像构建一个框架,它编译得很好。但是,当我将我的框架包含在另一个项目中时,它在加载图像时崩溃了,知道吗?
ImageTest(我的框架)
public class ImageTest {
open func getImage() {
return #imageLiteral(resourceName: "IMG_0745")
}
}
我的项目
import ImageTest
...
...
override func viewDidLoad() {
super.viewDidLoad()
let imageView = UIImageView(image: ImageTest.getImage()) // crash !
imageView.center = view.center
view.addSubview(imageView)
}
图像在 ImageTest 框架中。当您执行此代码 return #imageLiteral(resourceName: "IMG_0745")
时,它会查看 ImageTest 项目的 Image.xcassets,当它在那里找不到图像时,就会导致崩溃。
更改您的代码以使用 init function
的捆绑参数open func getImage() {
return UIImage(named:"IMG_0745", bundle:Bundle(for: self), compatibleWith:nil)
}
在 Swift 4 现在是
UIImage(named: "IMG_0745", in: Bundle(for:self), compatibleWith: nil)
在Swift5,
UIImage(named: "IMG_0745", in: Bundle(for: xxxYourViewController.self), compatibleWith: nil)