1

私はこの答えを見ました

https://stackoverflow.com/a/9243472/563381

そして、ナビゲーションバーのレイヤーにマスクを設定するとすぐに視覚的にうまく機能しますが、タッチに反応しなくなります...そのため、バーに表示される戻るボタンをクリックできません. タッチがCALAyerを通過するようにする解決策はありますか? CALayer がタッチをブロックしたり、マスクがタッチをブロックしたりするとは思いませんでした。

4

2 に答える 2

1

ええと、CALayer がタッチをブロックする理由が本当にわかりません。これは私には奇妙に聞こえます...

UINavigationBar の角を丸くする方法は、角に 2 つの UIImageView (10x10 ピクセル) を配置し、それらに 2 つの画像を追加することです。これらの画像は、タッチをブロックすることなく、マスクとして機能します。アンチエイリアシングを使用して画像を描画すると、見た目が完璧になります。

ここに画像の説明を入力

于 2012-04-05T16:40:43.700 に答える
0

このコードを使用してみてください:

self.navigationController.navigationBar.translucent = YES;

これにより、戻るボタンがオンになります。ボタンが表示されますが、別のレイヤーにあります。それがタッチが機能しない理由です..

アップデート:

このコード行をテストに使用します。これはあなたにとって魅力のように機能します。

//Style UINavigationBar
UIView *background = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
background.backgroundColor = [UIColor blackColor];
[self.view addSubview:background];
self.navigationController.navigationBar.tintColor = [UIColor cyanColor];
self.navigationController.navigationBar.translucent = YES;
CALayer *capa = [self.navigationController navigationBar].layer;
[capa setShadowColor: [[UIColor blackColor] CGColor]];
[capa setShadowOpacity:0.85f];
[capa setShadowOffset: CGSizeMake(0.0f, 1.5f)];
[capa setShadowRadius:2.0f];  
[capa setShouldRasterize:YES];

//Round
CGRect bounds = capa.bounds;
bounds.size.height += 10.0f;    //I'm reserving enough room for the shadow
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds 
                                               byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)
                                                     cornerRadii:CGSizeMake(10.0, 10.0)];

CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = bounds;
maskLayer.path = maskPath.CGPath;

[capa addSublayer:maskLayer];
capa.mask = maskLayer;

//Back Btn
UIButton *btnback = [UIButton buttonWithType:UIButtonTypeCustom];
[btnback setFrame:CGRectMake(0, 0, 54, 29)];
[btnback setBackgroundImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
UILabel * btnlabel =  [[UILabel alloc]initWithFrame:CGRectMake(15, 0, 40, 23)];
btnlabel.backgroundColor = [UIColor clearColor];
btnlabel.textColor = [UIColor whiteColor];
btnlabel.font = [UIFont boldSystemFontOfSize:13];
btnlabel.text = @"back";
[btnback addSubview:btnlabel];
[btnback addTarget:self action:@selector(backHome:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:btnback];
于 2013-03-07T16:01:37.703 に答える