2014-02-15 33 views
2

我在Xcode圖像目錄中使用切片時遇到問題。我在資產目錄中有圖像,在該目錄中名爲「SquareReactionButtonCrisp」的圖像。在我的xib中,我引用這個名稱來將其設置爲背景。然而,當我調整xib中的這個按鈕並重建時,圖像被拉伸而不是從切片線擴展。有任何想法嗎? 附上截圖。 謝謝, 山姆XCode images.assets資產目錄切片被忽略,圖像仍然存在變形

enter image description here

enter image description here

enter image description here

回答

6

資產編目和Xcode 5推出,但使用您的部署目標必須設置爲iOS7資產類別的圖像切片功能。如果你的目標設置爲iOS 6,這可能是你的問題的原因。查看類似的帖子,其中人回答了自己的問題。 How do you use an asset catalog image's slicing information programmatically?

+0

謝謝 - 這是問題 - 我是suppo在iOS 6中也一樣 - 已經計劃使用6個插槽(然後在幾個月內刪除,一旦ios 7接近幾乎全部)。他們應該更清楚地說明這一點。 –

2

我與iOS 6/7兼容的解決方案是在Xib文件中使用用戶定義的運行時屬性。因此,我們不必在源代碼中的任何地方編寫不雅的線條,以便用帶有可縮放圖像的按鈕的帽符替換xib中設置的圖像。

步驟1:在Xib中,選擇按鈕並在Identity Inspector面板中設置用戶定義的運行時屬性。您可以定義一個用於設置帽符的屬性。例如,一個名爲「capEnabled」的屬性只有一個簡單的布爾值,表示我們想要爲按鈕使用默認的頂點插入符。 (我打算附上屏幕截圖,但我被告知需要至少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文件

希望我的解決辦法是

相關問題