检测整个屏幕上的触摸
Posted
技术标签:
【中文标题】检测整个屏幕上的触摸【英文标题】:Detect touch on whole screen 【发布时间】:2013-12-31 00:09:06 【问题描述】:每当触摸特定的 UIViewController 时,我都想调用一个方法。
-touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
是一种可以做我正在寻找的方法,除了它没有检测到状态栏、导航栏或工具栏上的触摸。如何制作每次触摸 UIViewController 时运行的方法?或者换句话说,整个屏幕?
【问题讨论】:
为什么要这样做?你的视图应该只接受它自己的接触。 在 AppDelegate.m 中实现 touchesBegan 但我建议为每个视图控制器添加触摸事件 对于全屏检测(包括状态栏),我认为您需要将 UIWindow 子类化并使其成为FirstResponder:覆盖触摸并从窗口子类处理。 【参考方案1】:尝试添加手势识别。到您的窗口对象,因为它是 uiview
的子类。
或者像@Bamsworld 所说的那样。 “对于全屏检测(包括状态栏),我认为您需要子类 UIWindow
并使其成为 becomeFirstResponder:
覆盖触摸并从窗口子类处理。”
【讨论】:
【参考方案2】:子类 UIApplication 说 MyApplication 并实现方法
- (void)sendEvent:(UIEvent *)event
[super sendEvent:event];
// Do whatever you want
然后在 main.m 中将默认实现更改为
int main(int argc, char *argv[])
@autoreleasepool
return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([YourAppdelegate class]));
你会得到方法中的每一个动作
- (void)sendEvent:(UIEvent *)event
【讨论】:
【参考方案3】:#import <QuartzCore/QuartzCore.h>
- (void)viewDidLoad
[super viewDidLoad];
[self.view setMultipleTouchEnabled:YES];
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
// Remove old red circles on screen
NSArray *subviews = [self.view subviews];
for (UIView *view in subviews)
[view removeFromSuperview];
// Enumerate over all the touches and draw a red dot on the screen where the touches were
[touches enumerateObjectsUsingBlock:^(id obj, BOOL *stop)
// Get a single touch and it's location
UITouch *touch = obj;
CGPoint touchPoint = [touch locationInView:self.view];
// Draw a red circle where the touch occurred
UIView *touchView = [[UIView alloc] init];
[touchView setBackgroundColor:[UIColor redColor]];
touchView.frame = CGRectMake(touchPoint.x, touchPoint.y, 30, 30);
touchView.layer.cornerRadius = 15;
[self.view addSubview:touchView];
[touchView release];
];
【讨论】:
以上是关于检测整个屏幕上的触摸的主要内容,如果未能解决你的问题,请参考以下文章
IOS/Objective-C:检测 UIVIew 上的滑动和屏幕相同位置的按钮触摸