Xcode 使用多目标图像目录
我的应用程序有不同的目标,因为不同的客户端使用相同的应用程序,每个客户端都有自己的品牌 在我的图像资源目录中,我有图像集,例如: 客户123_登录背景 ClientABC_登录背景 客户端bfg_登录背景 等等 那么,在我设置背景的应用程序中,我如何告诉我的应用程序要使用哪个图像集 我是否可以使用目标名称来执行此操作Xcode 使用多目标图像目录,xcode,assets,target,Xcode,Assets,Target,我的应用程序有不同的目标,因为不同的客户端使用相同的应用程序,每个客户端都有自己的品牌 在我的图像资源目录中,我有图像集,例如: 客户123_登录背景 ClientABC_登录背景 客户端bfg_登录背景 等等 那么,在我设置背景的应用程序中,我如何告诉我的应用程序要使用哪个图像集 我是否可以使用目标名称来执行此操作 [UIImage imageNamed:@"{ClientABC}_LoginBackground"]; 1) 将预处理器宏添加到项目中,并根据标识不同客户端的每个目标定义其值:
[UIImage imageNamed:@"{ClientABC}_LoginBackground"];
1) 将预处理器宏添加到项目中,并根据标识不同客户端的每个目标定义其值:
2) 确保对所有相关目标和所有环境执行此操作
3) 创建如下内容:
#define NSStringize_helper(x) #x
#define NSStringize(x) @NSStringize_helper(x)
+ (NSString *)clientName
{
#ifndef CLIENT_TYPE
#error CLIENT_TYPE is not defined
#endif
return NSStringize(CLIENT_TYPE);
}
4) 现在,您可以轻松做到这一点:
NSString *imageNameString = [NSString stringWithFormat:@"%@_LoginBackground", self.class.clientName];
[UIImage imageNamed:imageNameString];
有没有办法确定在每种情况下选择了哪种图像比例(1x、2x、3x等)?图像比例背后的想法是,您不必知道选择了哪一个,这取决于设备,您始终可以确定它将是相关设备的正确图像比例。如果你真的想识别设备,有很多方法可以做到,比如我正试图调试它为什么不工作。背景按预期工作,但现在我无法将其用于显示徽标的UIImageView。好的,在初始化过程中无法将图像分配给UIImageView,将其移动到ViewDidLoad,它就工作了。再次感谢!很好的一点,如果您的图像视图是对Interface Builder中创建的元素的引用(
IBOutlet
),它们在init
方法期间未就绪,您可以通过在其中放置断点来检查这一点,并尝试在控制台中使用po self打印它。yourImageView
,它将为零。您可以在您提到的viewDidLoad
期间或在awakeFromNib
中设置其图像。