以下方法可用來設置導航欄上的漸變色。

- (void)setNavigationBarBackgroundColor{
// 創建 UIView用來承載漸變色放置在導航欄上時需要上移20否則狀態欄會露出
UIView *myTopView = [[UIView alloc]initWithFrame:CGRectMake(0, -20,WIDTH ,64)];
//1、window 沒有設置導航控制器為根視圖的情況下
#if 0
[self.view addSubview:myTopView];
//2、設置了導航控制器為根視圖。在AppDelegate中設置了
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[ViewController new]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
#else //則視圖添加在navigationBar上 或者其他方法設置在navigationBar處
[self.navigationController.navigationBar addSubview:myTopView];
#endif
// 創建漸變色圖層
CAGradientLayer *gradientLayer= [CAGradientLayer layer];
gradientLayer.frame =CGRectMake(0,0,WIDTH,64);
gradientLayer.colors =@[
(id)[UIColor yellowColor].CGColor,
(id)[UIColor cyanColor].CGColor
];
/* The start and end points of the gradient when drawn into the layer's
* coordinate space. The start point corresponds to the first gradient
* stop, the end point to the last gradient stop. Both points are
* defined in a unit coordinate space that is then mapped to the
* layer's bounds rectangle when drawn. (I.e. [0,0] is the bottom-left
* corner of the layer, [1,1] is the top-right corner.) The default values
* are [.5,0] and [.5,1] respectively. Both are animatable.
*/
// 設置漸變方向(0~1)默認位置為 (0.5,0) 和 (0.5,1)
gradientLayer.startPoint =CGPointMake(0,0);
gradientLayer.endPoint =CGPointMake(0,1);
// 設置漸變色的起始位置和終止位置(顏色的分割點)
/* An optional array of NSNumber objects defining the location of each
* gradient stop as a value in the range [0,1]. The values must be
* monotonically increasing. If a nil array is given, the stops are
* assumed to sPRead uniformly across the [0,1] range. When rendered,
* the colors are mapped to the output colorspace before being
* interpolated. Defaults to nil. Animatable. */
gradientLayer.locations =@[@(0.15f),@(0.98f)];
//漸變色圖層的線寬
gradientLayer.borderWidth =0.0;
// 添加圖層
[myTopView.layer addSublayer:gradientLayer];
}
新聞熱點
疑難解答