在我的iPad应用程序中,我有两个相同尺寸的mapView,彼此相邻。我希望这些始终显示相同的区域。我现在使用regionDidChangeAnimated:delegate方法实现了这一点。
这并不总是那么好(有时缩放后区域不同)并且用户移动其中一张地图与另一张移动之间存在延迟。
有没有一种很好的方法来复制两个地图上的触摸,以便当用户平移和缩放时,它会同时在另一个地图上自动执行相同的操作?
我看到的一件事是创建一个UITouch对象,其位置值与正在移动的地图中正在装箱的位置值相同,但这不是一个好的解决方案。
有没有办法将一个UIView上的一组触摸复制到另一个(因为MKMapView是一个UIView)?
谢谢, 罗斯
答案 0 :(得分:0)
尝试考虑使用一个静态变量和一个静态函数来控制缩放级别
答案 1 :(得分:0)
如果您没有为App Store开发,可以使用私有API来合成触摸 见http://cocoawithlove.com/2008/10/synthesizing-touch-event-on-iphone.html。
您可以通过覆盖[UIApplication sendEvent:]来拦截,复制和修改触摸事件。 我没有测试它应该工作,虽然你不能提交App Store。
答案 2 :(得分:0)
您可以使用UIGestureRecognizer
来帮助保持地图更加同步,因为用户正在操作其中一个地图。
例如,使用UIPanGestureRecognizer
时,手势识别器动作处理程序将在用户平移地图时多次触发 - 与仅在平移完成时触发的regionDidChangeAnimated
不同。
您需要为一个或两个地图添加手势识别器,并实现自定义手势处理程序方法。同时实现shouldRecognizeSimultaneouslyWithGestureRecognizer
委托方法并返回YES
,以便您的手势处理程序可以与地图一起使用。
示例:
//add the gesture handler to map(s)...
UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(gestureHandler:)];
pgr.delegate = self;
[mapViewA addGestureRecognizer:pgr];
[pgr release];
//...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:
(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
- (void)gestureHandler:(UIGestureRecognizer *)gestureRecognizer
{
[mapViewB setRegion:mapViewA.region animated:NO];
}
如果要为两者添加手势识别器,则需要为每个地图创建单独的实例(即,您无法将pgr
添加到两个地图中)。您可能还需要/需要添加UIPinchGestureRecognizer
和UITapGestureRecognizer
。您可以对所有识别器使用相同的处理程序方法。
我仍然会实施regionDidChangeAnimated
,以防错过手势。