2012-12-28 98 views
1

我使用外觀API來定製我的UIBarButtonItems的外觀。UIBarButtonItem與拉伸不平鋪UIImage在iOS5

目前,我需要讓我的按鈕看起來像這樣:

enter image description here

在iOS5中,你有這樣的方法,這是我在用的:

UIImage *button = [[UIImage imageNamed:@"btn"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 3)]; 
[[UIBarButtonItem appearance] setBackgroundImage:button forState:UIControlStateNormal 
             barMetrics:UIBarMetricsDefault]; 

但這種磚封頂非部分圖像而不是拉伸,這給我這個:

enter image description here

iOS 6中有一個新的方法

resizableImageWithCapInsets:resizingMode: 

它可以讓你指定一個「拉伸」調整模式,但它不適用於iOS5的。

如何讓按鈕伸展而不是平鋪iOS5圖像的中心?

+0

已添加是因爲它是一個必要功能的原因。你可以在ios5中完全拉伸圖像,或者你可以重複一遍一遍來填充空間,但是據我所知,拉伸特定部分是一個新的增加。 –

+0

我在想,它只是在某種程度上操縱引擎蓋下的UIImage,所以我認爲會有某種手動解決方法來達到與便捷方法相同的效果。 – Imran

+0

我不會說沒有,因爲我不知道肯定,但我不排除ios6添加更多便捷方法來完成任務的可能性。在幕後添加額外的繪製功能可以讓事情發生。 –

回答

0

原來,這在iOS5中是不可能的,如果按鈕樣式是梯形的,那麼按鈕應該總是使用水平樣式漸變。我最終改變了漸變方向。

+0

是的,使用SDK兼容性指南中描述的舊iOS5方法和技術,它**是可能的。看到我的答案。 – AliSoftware

0

您可以使用舊的和過時stretchableImageWithLeftCapWidth:topCapHeight:方法iOS5的,如果你需要拉伸:

UIImage* (^makeStretchableImage)(UIImage*, CGSize) = nil; 
if ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:resizingMode:)]) 
{ 
    // If resizableImageWithCapInsets:resizingMode: is available, use it 
    makeStretchableImage = ^(UIImage* image, CGSize inset) { 
     return [image resizableImageWithCapInsets:UIEdgeInsetsMake(inset.height, inset.width, inset.height, inset.width) resizingMode:UIImageResizingModeStretch]; 
    }; 
} 
else 
{ 
    // Else, we are on an older iOS release, use the deprecated iOS5 method instead 
    makeStretchableImage = ^(UIImage* image, CGSize inset) { 
     return [image stretchableImageWithLeftCapWidth:inset.width topCapHeight:inset.height]; 
    }; 
} 

UIImage* stretchableImage1 = makeStretchableImage(originalImage1, CGSizeMake(5,2)); 
UIImage* stretchableImage2 = makeStretchableImage(originalImage2, CGSizeMake(15,4)); 
UIImage* stretchableImage3 = makeStretchableImage(originalImage3, CGSizeMake(8,5));