Gru*_*kes 12 objective-c ios swift ios-app-extension ios10
我有一个框架,其中包含一个故事板和一组默认图像.该框架可以包含在多个应用程序中,目的是如果需要,应用程序可以使用自己的变体覆盖无,部分或全部默认图像.
我面临的问题是我没有找到适用于所有场景的解决方案,例如:如果框架包含一个名为Person的图像,那么框架由app A使用,它提供了自己的Person版本,以及框架由应用程序B使用,它不提供自己的Person版本然后:
如果框架使用以下代码设置图像:
let image = UIImage.init(named: "Person")
someImageView.image = image
然后,当app A运行时,会找到并正确显示Person图像的变体.(App A在其资产目录中有Person的变体)但是,当app B运行时,不会显示任何内容.
另一方面,如果我没有使用代码设置图像(即它在故事板图像视图的Xcode属性检查器中设置),那么当运行应用程序B时,现在正确显示默认框架图像,但现在应用程序A的自定义人员图像不显示.
有没有办法可以成功地涵盖这三种情况:
一个默认图像在框架中,应用程序A和应用程序B都不希望用它们的自定义图像覆盖它,默认图像在框架中,而应用程序A想要覆盖它,但应用程序B却没有.框架中有一个默认图像,app A和app B都希望用自己的变体覆盖它.(我有一个大型的故事板,框架中有几十个图像,理想情况下我希望有一个完全不涉及代码的解决方案 - 即默认图像名称是通过Xcode的属性检查器为图像视图设置的,如果是应用程序在其资产目录中提供自己的图像版本,自动显示图像)
这段代码有效,但看起来有点笨重,如果有一个无代码解决方案可能会很好 - 例如,只使用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")
| 归档时间: | 
 | 
| 查看次数: | 718 次 | 
| 最近记录: |