iOS 开发中有时候在做引导的时候会出现只有某一个或者几个控件可以点击,其他的都是不能点击的并且有一个半透明的黑色背景,按照常理来说黑色的背景view会遮盖掉所有的点击响应事件,这里提供一种解决方案,在事件响应链里面去修改手势的响应:
1.首先随便做一个VC,这里我才用了push到下一个界面,其中的button1 和button2 都可以push到下一个界面,但是我这里只想让button1可以点击
2.这样我们自定义一个覆盖物CusCover用以实现部分遮挡
.h文件
#import@interface CusCover : UIView
//可以被响应的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
这样就实现了自定义的cover。
3.调用自定义的cover
CusCover *cover=[[CusCover alloc]init];
cover.backgroundColor=[UIColor blackColor];
cover.alpha=0.3f;
cover.frame=self.view.bounds;
//想让哪些view可以响应事件
NSArray *visibilityViews=@[self.field,self.button];
cover.visbilityRects=visibilityViews;
[self.view addSubview:cover];
这样写的话就是一个输入框可以响应,button 可以响应(此处为button1),在点击field的时候,其成为了第一响应着可以输入,手势穿透了cover,button1 也可以push到下一个界面
到此已经实现了需求。
网友评论