Sam*_*din 8 cocoa-touch uiview ios
我有一个非常复杂的应用程序,有很多堆叠视图,包含许多按钮,绘图区域和其他自定义触摸处理.我正在显示一个可拖动的帮助器视图,它可以位于所有其他视图之上.如果用户点击辅助视图之外的任何地方,我需要忽略此视图.我尝试过使用多个UIWindows并在UIWindow中添加Gesture识别器.
Guo*_*uan 16
一个简单的方法是添加一个透明按钮,其边界等于superview的边界.并且superview在帮助器视图下方插入透明按钮.
透明按钮添加一个单击事件,可以解除帮助视图和它自己的透明按钮.
例如 :
UIButton *transparencyButton = [[UIButton alloc] initWithFrame:superview.bounds];
transparencyButton.backgroundColor = [UIColor clearColor];
[superview insertSubview:transparencyButton belowSubview:helperView];
[transparencyButton addTarget:self action:@selector(dismissHelper:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
并且dismissHelper:方法可以这样做:
- (void)dismissHelper:(UIButton *)sender
{
[helperView dismiss];
sender.hidden = YES;
// or [sender removeFromSuperview]
}
Run Code Online (Sandbox Code Playgroud)
您可以通过触摸并查看触摸的.view属性来检查被触摸的视图.它反映了视图实际来源的视图.
假设您将视图(通过IBOutlet或其他方式)引用到名为"myView"的视图,则以下工作方式.
在.m文件中.每次用户触摸手指时触发touchesBegan:function.我们遍历触摸以查看触摸的原始视图是否不等于"myView".也可以通过检查用于标识视图的类,标记或任何其他属性来完成此比较.下面给出的例子.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touches began");
UITouch *touch = [touches anyObject];
if(touch.view!=myView){
myView.hidden = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
或者在使用标签的情况下:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touches began");
UITouch *touch = [touches anyObject];
if(touch.view.tag!=23){
myView.hidden = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15530 次 |
| 最近记录: |