你如何在程序中使用资源目录图像的切割信息?

5

我曾在项目中使用过一张图片,加载代码如下:

UIImage *image = [[UIImage imageNamed:@"image_name"] resizableImageWithCapInsets:UIEdgeInsetsMake(10.0f, 10.0f, 10.0f, 10.0f)];

现在我将这张图片放入XCode 5的新资产目录中,并设置了切片。我如何在我的代码中使用该图像,以便在加载图像时不必显式调用resizableImageWithCapInsets
换句话说,我如何将存储在Images.xcassets中的切片信息存储在UIImagecapInsets属性中?
还是我想错了吗?
2个回答

3

好的,我能够解决这个问题。

为了自动使用存储在资源目录(Images.xcassets)中的图像中的切片信息,您需要将部署目标设置为7.0或更高版本。

希望这能帮助其他人。


2
我的解决方案兼容iOS 6/7,使用Xib文件中的用户自定义运行时属性。这样,我们就不必在源代码中随处编写不雅观的代码行来替换xib中的图像集,并将其与带有cap插页的可伸缩图像一起使用于按钮。
步骤1:在Xib中,选择按钮并在Identity Inspector面板中设置用户自定义运行时属性。您可以定义一个属性来设置cap插页。例如,一个名为“capEnabled”的属性,只需一个简单的布尔值,表示我们想要为按钮使用默认的cap插页。(我打算附上截图,但是被告知需要至少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

步骤三:在您想要使用新功能的UIButton的任何位置导入该类别的头文件,或者只需将其导入到.pch文件中。

希望我的解决方案对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接