iOS 開發(fā)中有時候在做引導(dǎo)的時候會出現(xiàn)只有某一個或者幾個控件可以點(diǎn)擊,其他的都是不能點(diǎn)擊的并且有一個半透明的黑色背景,按照常理來說黑色的背景view會遮蓋掉所有的點(diǎn)擊響應(yīng)事件,這里提供一種解決方案,在事件響應(yīng)鏈里面去修改手勢的響應(yīng):
1.首先隨便做一個VC,這里我才用了push到下一個界面,其中的button1 和button2 都可以push到下一個界面,但是我這里只想讓button1可以點(diǎn)擊
2.這樣我們自定義一個覆蓋物CusCover用以實(shí)現(xiàn)部分遮擋?
.h文件
#import@interface CusCover : UIView
//可以被響應(yīng)的views
@property(nonatomic,strong) NSArray *visbilityRects;
@end
.m文件
#import "CusCover.h"
@implementation CusCover
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
for(UIView *subview in self.visbilityRects)
{
CGPoint btnPointInA = [subview convertPoint:point fromView:self];
if ([subview pointInside:btnPointInA withEvent:event]) {
return subview;
}
}
return [super hitTest:point withEvent:event];
}
@end
這樣就實(shí)現(xiàn)了自定義的cover。
3.調(diào)用自定義的cover
CusCover *cover=[[CusCover alloc]init];
cover.backgroundColor=[UIColor blackColor];
cover.alpha=0.3f;
cover.frame=self.view.bounds;
//想讓哪些view可以響應(yīng)事件
NSArray *visibilityViews=@[self.field,self.button];
cover.visbilityRects=visibilityViews;
[self.view addSubview:cover];
這樣寫的話就是一個輸入框可以響應(yīng),button 可以響應(yīng)(此處為button1),在點(diǎn)擊field的時候,其成為了第一響應(yīng)著可以輸入,手勢穿透了cover,button1 也可以push到下一個界面
到此已經(jīng)實(shí)現(xiàn)了需求。