如何以编程方式使用资产目录图像的切片信息?

我曾经在我的项目中有一个图像,我会像这样加载它:

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

现在我把这个图像放到XCode 5的新资产目录中,然后为它设置切片。 如何在代码中使用该图像,以便在加载图像时不必显式调用resizableImageWithCapInsets

换句话说,我如何把Images.xcassets中存储的切片信息存储在UIImagecapInsets属性中呢?

还是我想这个全错了?

好吧,我能够弄清楚这一点。

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

希望这可以帮助别人。

我与iOS 6/7兼容的解决scheme是在Xib文件中使用用户定义的运行时属性。 因此,我们不必在源代码中的任何地方写出不雅的线条,以便用可缩放的图像replacexib中设置的图像,并使用button的图标。

步骤1:在Xib中,selectbutton并在Identity Inspector面板中设置用户定义的运行时属性。 您可以定义一个用于设置大小写插入的属性。 例如,一个名为“capEnabled”的属性只有一个简单的布尔值,表示我们要使用默认的button的顶点插入。 (我打算附上截图,但有人告诉我至less需要10个声望来发布图像… :-()

第2步:在UIButton上创build一个类别并添加一个属性“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 

第三步:导入你想创build的UIButton的任何地方的类别的头文件,或者直接导入到.pch文件中。

希望我的解决scheme对你有帮助。