今天遇到一個(gè)為導(dǎo)航欄設(shè)置漸變背景色的需求,直接設(shè)置肯定是不行的了。所以采取曲線救國的政策。
思路:1. 先創(chuàng)建一個(gè)漸變背景色的UIView
2.再將UIView轉(zhuǎn)成UIImage
3. 最后將轉(zhuǎn)成的UIImage設(shè)置成UINavigationBar的背景圖片即可。
思路明確了,剩下的就是碼代碼了。
關(guān)鍵代碼如下,在UIView的category里增加兩個(gè)方法:
-
(void)addGradualLayerWithColors:(NSArray *)colors {
if (colors == nil && colors.count == 0) {
return;
}CAGradientLayer *_gradientLayer = [CAGradientLayer layer];
_gradientLayer.startPoint = CGPointMake(1, 0);//第一個(gè)顏色開始漸變的位置
_gradientLayer.endPoint = CGPointMake(0, 1);//最后一個(gè)顏色結(jié)束的位置
_gradientLayer.frame = self.bounds;//設(shè)置漸變圖層的大小
_gradientLayer.colors = colors;
[self.layer insertSublayer:_gradientLayer atIndex:0];
} (UIImage)convertToImage{
CGSize s = self.bounds.size;
// 下面方法,第一個(gè)參數(shù)表示區(qū)域大小。第二個(gè)參數(shù)表示是否是非透明的。如果需要顯示半透明效果,需要傳NO,否則傳YES。第三個(gè)參數(shù)就是屏幕密度了
UIGraphicsBeginImageContextWithOptions(s, NO, [UIScreen mainScreen].scale);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImageimage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
完美解決。