我有一个框架,其中包含一个故事板和一组默认图像。 该框架可以包含在多个应用程序中,目的是如果需要,应用程序可以覆盖任何默认图像,使用自己的变体。
我面临的问题是我找不到适用于所有情况的解决方案,例如: 如果框架包含一个名为Person的图像,并且app A使用该框架提供它自己的Person版本,那么框架由app B使用,它不提供自己版本的Person:
如果框架使用以下代码设置图像:
let image = UIImage.init(named: "Person")
someImageView.image = image
然后,当app A运行时,会找到并正确显示Person图像的变体。 (App A在其资产目录中有Person的变体) 但是,当应用程序B运行时,不显示任何内容。
另一方面,如果我没有使用代码设置图像(即在故事板图像视图的Xcode属性检查器中设置),那么当运行app B时,现在默认的框架图像是显示正确,但现在不会显示应用程序A的自定义个人图像。
有没有办法可以成功地涵盖这三种情况:
(我在框架中有几十个图像的大型故事板,理想情况下我希望有一个根本不涉及代码的解决方案 - 即默认图像名称是通过Xcode的属性检查器设置的对于图像视图,如果应用程序在其资产目录中提供自己的图像版本,则会自动显示图像
答案 0 :(得分:0)
这段代码有效,但看起来有点笨拙,如果有一个无代码解决方案可能会很棒 - 例如,只使用xcode / storyboard设置。
extension UIViewController {
func getImage(name:String) -> UIImage?
{
var bundle = Bundle.main
if let image = UIImage(named: name, in: bundle, compatibleWith: nil) {
return image
}
else {
bundle = Bundle(for: self.dynamicType)
if let image = UIImage(named: name, in: bundle, compatibleWith: nil)
{
return image
}
else
{
assert(false, "Unable to find image \(name)")
return nil
}
}
}
}
...
theImage.image = getImage(name: "Person")