2012-01-24 9 views
0

ナビゲーションバーのレイヤにグラデーションを追加していて、うまくいきます。 別のビューのコントローラとポップビューのコントローラをプッシュすると問題が発生します。親ビューコントローラには、View Controllerをポップすると色が薄くなる右のバーボタンアイテムがあります。 私のコードはaddGradientToNavigationBarためNavigationBarレイヤのグラデーションがうまく機能しない

CGRect navFrame = self.navigationController.navigationBar.frame; 
navFrame.origin.y = 0.0f; 
[self.navigationController.navigationBar.layer insertSublayer:[AddGradient addGradientToNavigationBar:navFrame] atIndex:0]; 

コードは、私は同じ問題を抱えている

+ (CAGradientLayer*)addGradientToNavigationBar:(CGRect)navRect { 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = navRect; 
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0] CGColor], 
        (id)[[XAppDelegate getColor] CGColor], nil]; 

    return gradient; 
} 

答えて

3

です。 ガラスの効果のためにUIBarStyleBlackTranslucentスタイルのナビゲーションバーにグラデーションレイヤーを追加しようとしていました。ウェブと多くの実験を検索した後、私はその問題の正しい解決策を見つけられませんでした。最後に、私は周りに、次の作業を思い付いてきました:

CAGradientLayer *yourGradient = ... 

//これは、ナビゲーションバーのボタン

[rootController.navigationBar setBarStyle:UIBarStyleBlackTranslucent]; 
のために必要とされる// UIBarStyleBlackTranslucentスタイルに

CAGradientLayer *gradient = [CAGradientLayer layer]; 

    gradient.frame = CGRectMake(0, 0, 320, 44); 


    NSMutableArray *cgColors = [[NSMutableArray alloc] init]; 

    [cgColors addObject:(id)[[UIColor colorWithRed:0.0 
            green:0.0 
             blue:0.0 
            alpha:0.2] CGColor]]; 
    [cgColors addObject:(id)[[UIColor colorWithRed:0.0 
            green:0.0 
             blue:0.0 
            alpha:0.6] CGColor]]; 
    [cgColors addObject:(id)[[UIColor colorWithRed:0.0 
            green:0.0 
             blue:0.0 
            alpha:0.5] CGColor]]; 

    gradient.colors = cgColors; 

    CALayer *layer = [CALayer layer]; 

    _layer.frame = CGRectMake(0, 22, 320, 22); 

    _layer.backgroundColor =[[UIColor colorWithRed:0.0 
              green:0.0 
               blue:0.0 
              alpha:0.2] CGColor]; 

を模倣するために、2つの追加の層が必要

//ナビゲーションバーレイヤの最初のサブレイヤにレイヤを追加する

[[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:yourGradient atIndex:0]; 
グラデーションレイヤーを追加した後、UIBarStyleBlackTranslucentスタイルの効果は、以下がそれを

を模倣するために必要とされる(ただし、ボタンから)

//だから

//バーから消え//

[[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:gradient atIndex:1]; 

    [[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:layer atIndex:2]; 

境界線が消えるように、レイヤにいくつかの境界線を追加することもできます。

関連する問題