我在我的自定义UIApplication
子类中拦截所有事件(用于调试目的):
[super sendEvent:event];
if(event.type == UIEventTypeTouches){
if(event.allTouches.anyObject.phase == UITouchPhaseBegan){
// NSLog(@"Touch began on view %@", event.allTouches.anyObject.view);
}
}
无论视图,手势识别器,用户交互等等,它都适用于任何触摸。
但是,我有一个MKMapView
没有接收到任何触摸(启用了用户交互),甚至没有转发到应用程序实例的触摸。换句话说,当我触摸特定的MKMapView
时,sendEvent:
未在应用程序中调用。
这怎么可能?据我所知,无论我做什么,UIApplication
总是 接受sendEvent:
方式的触摸。
我错过了什么吗? (我在iOS 11.4上)
答案 0 :(得分:0)
我终于解决了这个问题。
我不断根据用户的方向(指南针,倾斜等)动画地图,即使设备倾斜/移动一位,也可以创建3D效果,这似乎是连续发生的:
...
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 0.033;
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:frame
toQueue:motionQueue
withHandler:
^(CMDeviceMotion* motion, NSError* error){
//update map
}];
...
在地图更新方法中,我将地图动画为新的相机数据,以便直观地平滑更新:
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear
animations:block completion:nil];
由于常量动画,视图忽略了触摸输入。
我已将UIViewAnimationOptionAllowUserInteraction
添加到我的动画选项中,这解决了问题:
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear
| UIViewAnimationOptionAllowUserInteraction animations:block completion:nil];