2012-04-05 37 views

回答

1

好了,我真的不知道为什么CALayer的块接触,这听起来很奇怪,我...

我圆UINavigationBar的角落在于把2的UIImageView(10×10像素),在弯道和添加的方式2图像给他们。这些图像可以用作蒙版,而不会阻挡触摸。如果您使用抗锯齿技术来绘制图像,则外观非常完美。

enter image description here

+0

我觉得很奇怪,设置图层蒙版也会对接触产生任何影响。你是否在作为自定义导航栏的drawrect中执行此操作?或者你只是将它们作为子视图添加到导航栏? – 2012-04-05 17:27:50

+0

这两个UIImageView位于我的NIB文件的顶部(正面)。所以他们没有连接到我的UINavigationBar,但“高于”它。 – Beppe 2012-04-05 17:46:39

+0

我将它们添加为子视图,它工作正常。只有问题是它与两个PNG的混乱,必须完全匹配导航栏的颜色,这是困难的。给你一个投票,但它不是我正在寻找的答案。 我真的想弄清楚为什么面具不能正常工作。为了让事情变得陌生,我刚开始了一个全新的项目,并使用了相同的掩码,并且没有阻挡触摸......我的主项目中没有任何其他navbar变更,掩码是第一个也是唯一的... – 2012-04-05 17:50:56

0

你应该尝试使用此代码:

self.navigationController.navigationBar.translucent = YES;

这港岛线打开你的背部button.You可以看到您的按钮,但其在另一层。这就是为什么它不会工作的触摸..

UPDATE:

使用此行代码测试。这会像你的魅力一样工作。

//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];