第一步:修改AppDelegate中继承UIResponder为继承:UIApplication
即:@interface AppDelegate : UIResponder <UIApplicationDelegate>
第二步:为了能让继承了UIApplication的AppDelegate起作用,需要将main.m中的更改为:return UIApplicationMain(argc, argv, NSStringFromClass([AppDelegate class]), NSStringFromClass([AppDelegate class]));
即:
int main(int argc, char * argv[]) {
// return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
return UIApplicationMain(argc, argv, NSStringFromClass([AppDelegate class]), NSStringFromClass([AppDelegate class]));
}
}
– (void)sendEvent:(UIEvent *)event{
NSSet *allTouches = [event allTouches];
UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;
if (phase == UITouchPhaseBegan){
NSLog(@”send UITouchPhaseBegan“);
}
if (phase == UITouchPhaseEnded){
NSLog(@”send UITouchPhaseEnded“);
}
if (phase == UITouchPhaseMoved) {
}
if (phase == UITouchPhaseCancelled) {
}
}
即:重写父类sendEvent:(UIEvent *)event事件的方法
以上方法使用的时候有一个弊端,当触摸界面的时候,可能部分控件未反应出触摸事件,例如UIScrollview可能对触摸事件进行了屏蔽,或者内部的模拟点击事件,可能系统认为不是触摸事件,延时事件可能大于一定事件才认为是触摸事件。
我建议在使用的时候改用:CADisplayLink方法进行时时监听你想要的事件发生了改变。
第一步:
定义这个事件,他是一个时时的刷新事件,类似timer,是timer的兄弟控件
@property (nonatomic, strong) CADisplayLink *displayLink;
第二步:
开启这个时时的监听事件
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(aaabbb)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
第三步:
// 对你想要监听的事件进行判断,当前里面的事件,是否发生了改变。
}
第四步:
[self.displayLink invalidate];
第五步:
如果你的界面刷来刷去,你就不用这么复杂,直接重新加载就好啦!
原文地址:https://blog.csdn.net/huwan12345/article/details/125098256
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_29230.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!