我想在当前窗口上创建一个透明的蒙版视图,它只跟踪触摸事件并将它们传递给下面的可见视图。但是,如果我将 userInteractionEnabled=YES 设置为此掩码,这会阻止事件并且不会在下面传递。
有什么办法可以阻止这个视图阻止事件,或者手动传递下面的事件?
谢谢,
我想在当前窗口上创建一个透明的蒙版视图,它只跟踪触摸事件并将它们传递给下面的可见视图。但是,如果我将 userInteractionEnabled=YES 设置为此掩码,这会阻止事件并且不会在下面传递。
有什么办法可以阻止这个视图阻止事件,或者手动传递下面的事件?
谢谢,
我最近刚刚为我的一个应用程序做了这个,结果证明它非常简单。
准备继承 UIView:
我将我的 Mask View 称为捕手视图,这就是协议的外观:
@interface CatcherView : UIView {
UIView *viewBelow;
}
@property(nonatomic,retain)UIView *viewBelow;
@end
在这里,您只是将 UIView 子类化并保留对下面视图的引用。
在实现中,您需要完全实现至少 4 种方法来将触摸传递给视图或下面的视图,这些方法的外观如下:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touch Began");
[self.viewBelow touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touch Moved");
[self.viewBelow touchesMoved:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touch Ended");
[self.viewBelow touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touch Cancelled");
//Not necessary for my app but you just need to forward it to your view bellow.
}
请记住在创建视图时设置视图或以下视图;将背景颜色设置为清除也很重要,因此它充当蒙版。看起来是这样的:
CatcherView *catchView=[[CatcherView alloc] initWithFrame:[self.view bounds]];
catchView.backgroundColor=[UIColor clearColor];
catchView.viewBelow=myViewBellow;
[self.view addSubview:catchView];
如果您需要更多信息,希望它有所帮助并发表评论。
-hitTest:withEvent:
消息来确定事件的目标视图因此,如果您-[NSView hitTest:withEvent:]
在适当高的视图中覆盖(可能通过使用自定义窗口!),您可以记录所有传入事件并调用super
以使它们正常运行。