XCode images.assets资产目录切片被忽略,图像仍然失真

时间:2014-02-15 00:18:34

标签: xcode button ios7 resize asset-catalog

我在Xcode图像目录中使用切片时遇到问题。我在资产目录中有图像,该图像中的图像名为“SquareReactionButtonCrisp”。在我的xib中,我引用此名称将其设置为背景。然而,当我在xib中重新调整此按钮并重建时,图像被拉伸而不是从切片线扩展。有任何想法吗? 附上截图。 谢谢, 萨姆

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:6)

资产目录是随Xcode 5引入的,但要使用资产目录的图像切片功能,您的部署目标必须设置为iOS7。如果您的目标设置为iOS 6,则可能是您遇到问题的原因。看到人们回答他们自己的问题的类似帖子。 How do you use an asset catalog image's slicing information programmatically?

答案 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文件。

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