我以前在我的项目中有一个图像,我会像这样加载它:
UIImage *image = [[UIImage imageNamed:@"image_name"] resizableImageWithCapInsets:UIEdgeInsetsMake(10.0f, 10.0f, 10.0f, 10.0f)];
现在我将该图像放入XCode 5的新资产目录中,并为其设置切片。如何在我的代码中使用该图像,以便在加载图像时不必显式调用resizableImageWithCapInsets
?
换句话说,如何获取存储在Images.xcassets中的切片信息并将其存储在UIImage
的{{1}}属性中?
或者我认为这一切都错了?
答案 0 :(得分:3)
好的,我能够弄清楚这一点。
为了自动使用存储在资产目录(Images.xcassets)中的图像中的切片信息,您需要将部署目标设置为7.0(或更高)。
希望这有助于其他人。
答案 1 :(得分:2)
我与iOS 6/7兼容的解决方案是在Xib文件中使用用户定义的运行时属性。因此,我们不必在源代码中的任何地方写出不优雅的行来替换xib中的图像集,并使用带有按钮的插入插件的可伸缩图像。
步骤1:在Xib中,选择按钮并在Identity Inspector面板中设置用户定义的运行时属性。您可以定义用于设置上限插入的属性。例如,一个名为“capEnabled”的属性只有一个简单的布尔值,表示我们想要为按钮使用默认的cap insets。 (我打算附上截图,但我被告知我需要至少10个声望才能发布图片...... :-()
步骤2:在UIButton上创建一个类别并添加一个属性“capEnabled”并实现getter和setter方法。
@interface UIButton (NBAHelper)
@property (nonatomic, assign) BOOL capEnabled;
@end
@implementation UIButton (NBAHelper)
-(BOOL)capEnabled{
UIImage *buttonBackgroundImage = [self backgroundImageForState:UIControlStateNormal];
CGFloat capLeft = buttonBackgroundImage ? buttonBackgroundImage.capInsets.left : 0;
return capLeft>0;
}
-(void)setCapEnabled:(BOOL)capEnabled{
if (capEnabled) {
UIImage *buttonBackgroundImage = [self backgroundImageForState:UIControlStateNormal];
if (buttonBackgroundImage) {
[self setBackgroundImage:[buttonBackgroundImage stretchableImageWithLeftCapWidth:5 topCapHeight:5] forState:UIControlStateNormal];
}
}
}
@end
步骤3:在您想要使用您创建的UIButton的新功能的任何位置导入类别的头文件,或者只是将其导入.pch文件。
希望我的解决方案对您有所帮助。