2014-01-17 25 views
4

我曾經有一個形象在我的項目,我會加載這樣的:如何以編程方式使用資產目錄圖像的切片信息?

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

現在我把圖像變成了XCode 5的新資產類別和我設置切片它。如何在我的代碼中使用該圖像,以便在加載圖像時不必明確地調用resizableImageWithCapInsets

換句話說,如何將Images.xcassets中存儲的切片信息存儲在UIImagecapInsets屬性中?

或者我在想這一切都是錯誤的?

回答

3

好吧,我能弄清楚這一點。

爲了自動使用存儲在資產目錄(Images.xcassets)中的圖像中的切片信息,您需要將部署目標設置爲7.0(或更高)。

希望這可以幫助別人。

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文件

希望我的解決辦法是對你有幫助

相關問題