Sta*_*ger 5 xcode objective-c interface-builder ios swift
在我的应用程序中有一个设置,您可以选择“猫”或“狗”。根据此设置,应用程序中的所有图像都应该不同:图标、背景等
\n\n我不想为所有图像创建单独的出口并编写将替换这些图像的代码。是否有一种机制允许我有条件地使用一组图像或另一组图像,具体取决于我的内部变量。
\n\n最接近我需要的是 iOS 资产目录支持深色外观 \xe2\x80\x94 我的应用程序中的所有图像(包括通过界面生成器设置的没有插座的图像)都会被神奇地替换,具体取决于应用程序外观。我想要相同的行为,但基于我的内部设置。
\n小智 1
在 iOS 和 Xcode 中都不能以编程方式在资产目录之间进行切换(至少不能以您所描述的方式),因此必须使用一些解决方法。原因是应用程序包中的所有 xcasset 都已加载,您可以在运行时使用其中任何一个的图像,而无需指定资源的选项。iOS Resources Bundle它可以通过使用XCAssets来实现:
Resource Bundles,根据您的需要命名它们,它们将代表您所在州的数据集合。*.xcassets并分配图像`
enum AppState {
case dog
case cat
var bundle: Bundle {
switch self {
case .dog:
return Bundle(identifier: "com.dog")!
case .cat:
return Bundle(identifier: "com.cat")!
}
}
Run Code Online (Sandbox Code Playgroud)
`
就是这样,瞧。当然,您可以通过扩展图像来使您的生活更轻松。我想您会使用相同的图像名称,只有状态会改变。
extension UIImage {
func getImage(named: String, state: AppState) {
return UIImage(named: named, in: state.bundle!)
}
}
Run Code Online (Sandbox Code Playgroud)
希望这是您所需要的。