Smi*_*key 5 iphone user-input input objective-c touches
除了特定的几个点(例如按钮)之外,我想禁用屏幕上所有区域的触摸.也就是说,当我点击按钮以外的任何东西时,我根本不想触摸'touchesBegan'.调用
self.view.userInteractionEnabled = NO;
Run Code Online (Sandbox Code Playgroud)
没有注册触摸有所需的效果,但当然我不能点击任何按钮.我基本上希望按钮仍然有效,即使有5个点触摸屏幕,即所有触摸输入都已用完,按钮代表第6个.
这可能吗?
我已经尝试在我的按钮下方插入一个禁用了userInteraction的视图,但是当用户点击屏幕时它仍会记录触摸.似乎禁用触摸注册的唯一方法是在整个屏幕上(在父UIView上)这样做.
更新:我尝试使用手势识别器来处理所有触摸事件,并忽略那些不符合条件的事件.这是我的代码:
@interface ViewController : UIViewController <UIGestureRecognizerDelegate>
Run Code Online (Sandbox Code Playgroud)
...
- (void)viewDidLoad
{
[super viewDidLoad];
UIGestureRecognizer *allRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:nil];
allRecognizer.delegate = self;
[self.view addGestureRecognizer:allRecognizer];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
CGPoint coords = [touch locationInView:self.view];
NSLog(@"Coords: %g, %g", coords.x, coords.y);
if (coords.y < 200) {
[self ignoreTouch:touch forEvent:nil];
return TRUE;
}
return FALSE;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"%i touch(es)", [touches count]);
}
Run Code Online (Sandbox Code Playgroud)
然而,屏幕仍然"读取"触摸,所以如果我放下5个手指,第6个不会触发按钮按下...
您需要设置一个不可见的UIButton,并将其放置在不应注册触摸的视图和应该仍处于活动状态的UIButton之间.
现在你需要设置隐形按钮的'userInteractionEnabled':
//userInteractionEnabled == NO => self.view registeres touches
//userInteractionEnabled == YES => self.view doesn't register touches
[_invisibleButton setUserInteractionEnabled:NO];
Run Code Online (Sandbox Code Playgroud)
在这个解决方案中真正重要的是,无形和可见按钮都是VC视图的直接子视图.
您可以从我的保管箱下载示例项目:https: //dl.dropboxusercontent.com/u/99449487/DontTapThat.zip
但是,此示例仅阻止处理某些触摸.完全忽略输入在技术上是不可能的:第三方应用程序不负责检测输入.他们只负责处理输入.触摸输入的检测是在iOS上完成的.
构建像你在评论中描述的案例的唯一方法是希望iOS不会将你的案例输入解释为"手指",因为它最有可能覆盖一个比手指大的区域.
因此,总之,最好的方法是改变您即将建造的箱子的材料,或者至少给它一个非导电涂层.从第三方开发人员的角度来看,如果评论中描述需要5个手指,则无法通过软件实现目标.
| 归档时间: |
|
| 查看次数: |
5128 次 |
| 最近记录: |