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

Posted

技术标签:

【中文标题】XCode images.assets 资产目录切片被忽略,图像仍然失真【英文标题】:XCode images.assets asset catalog slicing been ignored and images still distored 【发布时间】:2014-02-15 00:18:34 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢 - 这就是问题所在 - 我也支持 iOS 6 - 曾计划将 cap insets 用于 6(然后在 ios 7 几乎全部使用后在几个月内删除)。他们应该更清楚地说明这一点。【参考方案2】:

我与 iOS 6/7 兼容的解决方案是在 Xib 文件中使用用户定义的运行时属性。这样我们就不必在源代码中到处写不雅的行来将 xib 中设置的图像替换为按钮帽插入的可拉伸图像。

步骤 1:在 Xib 中,选择按钮并在 Identity Inspector 面板中设置用户定义的运行时属性。您可以定义一个属性来设置 cap insets。例如,一个名为“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

第三步:在任何你想为你创建的 UIButton 使用新功能的地方导入类别的头文件,或者直接将它导入到 .pch 文件中。

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

【讨论】:

以上是关于XCode images.assets 资产目录切片被忽略,图像仍然失真的主要内容,如果未能解决你的问题,请参考以下文章

如何在资产目录中设置可访问性标签? Xcode 11

Xcode 11 beta 中的“Preview Assets”资产目录有啥用?

`imageWithName:` 忽略 Xcode 资产目录`Alignment` 属性

以编程方式更新 Xcode 资产目录

Xcode 5.1 + 资产目录 + 存档 = AppIcon 无效图像路径

如何在 Xcode 资产目录中分配启动图像?