检测整个屏幕上的触摸

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 上的滑动和屏幕相同位置的按钮触摸

Xcode Swift - 检测屏幕上颜色的触摸

使用 Unity3D 的 IPointerDownHandler 方法,但使用“整个屏幕”

苹果手机。在一个手指触摸屏幕时检测另一个手指触摸

检测触摸并按住屏幕iPhone(Xcode)[重复]

检测用户是不是在 iOS 上触摸过屏幕