Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 夹持MKMapView时保持中心坐标_Iphone_Objective C_Ios_Mkmapview - Fatal编程技术网

Iphone 夹持MKMapView时保持中心坐标

Iphone 夹持MKMapView时保持中心坐标,iphone,objective-c,ios,mkmapview,Iphone,Objective C,Ios,Mkmapview,如果您在跟踪设备位置的同时在Apple的地图应用程序中按一下放大/缩小,则按一下手势的“平移”部分将被忽略,蓝色位置指示灯将固定在屏幕中央。使用普通的MKMapView时,情况并非如此 假设我已经有了用户的位置,我怎样才能达到这个效果呢?我尝试在代理的regionId/WillChangeAnimated:方法中重置中心坐标,但它们仅在手势的开始和结束时被调用。我还尝试添加了一个uipinchgestureerecognizer子类,在触摸移动时重置中心坐标,但这导致了渲染问题 编辑:对于感兴

如果您在跟踪设备位置的同时在Apple的地图应用程序中按一下放大/缩小,则按一下手势的“平移”部分将被忽略,蓝色位置指示灯将固定在屏幕中央。使用普通的
MKMapView
时,情况并非如此

假设我已经有了用户的位置,我怎样才能达到这个效果呢?我尝试在代理的
regionId/WillChangeAnimated:
方法中重置中心坐标,但它们仅在手势的开始和结束时被调用。我还尝试添加了一个
uipinchgestureerecognizer
子类,在触摸移动时重置中心坐标,但这导致了渲染问题


编辑:对于感兴趣的人,以下内容适合我

// CenterGestureRecognizer.h
@interface CenterGestureRecognizer : UIPinchGestureRecognizer

- (id)initWithMapView:(MKMapView *)mapView;

@end

然后只需将其添加到您的
MKMapView

[self.mapView addGestureRecognizer:[[[CenterGestureRecognizer alloc] initWithMapView:self.mapView] autorelease]];

只是一个猜测,但是您是否尝试过将
区域开头的
滚动启用
设置为
将更改动画:

也只是一个猜测。在区域开始时,WillChangeAnimated:保存当前地图区域,然后使用self.myMapView.region=SavedRegion或类似工具通过NSTimer连续更新区域。然后在调用regionDidChangeAnimated:时使计时器无效

但是,您可能会遇到这样的问题:NSTimer进行的区域更新会导致再次调用regionWillChangeAnimated


试一试,看看会发生什么。

当用户在实际设备上挤压屏幕(与模拟器相反)时,会产生平移和挤压手势–挤压包含运动的“缩放”元素,平移包含垂直和水平变化。您需要拦截和阻止pan,这意味着使用
UIPANGestureRecognitor

scrollEnabled
设置为
NO
,然后添加
UIPanGestureRecognizer
以重置中心坐标。该组合将阻止单指平移和夹点的平移组件


Edit添加更多细节,在查看代码后:
touchesMoved:withEvent
在平移已经开始后被调用,因此如果更改MKMapView的中心位置,您将遇到您描述的赫基急促渲染问题。您真正需要的是创建一个带有目标操作的
UIPangestureRecognitor
,如下所示:

    UIPanGestureRecognizer *pan = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizePan)] autorelease];
    pan.delegate = self;
    [self.mapView addGestureRecognizer:pan];

…然后将一个
didRecognitizePan
方法添加到控制器中,并在那里重置中心。

不幸的是,这不起作用。如果我在开始时将其设置为
NO
(委托方法之外),则禁用单指平移,但仍使用捏捏手势的“平移”组件。我怀疑这将导致与问题中提到的相同的渲染故障;它实际上也在做同样的事情,只是用一个计时器,而不是
uigesturecognizer
。如果我有任何成功,我会调查并报告。我曾尝试过拦截平移手势,但似乎不起作用。祝你好运,迫不及待地想知道解决办法是什么!这导致了与上述相同的渲染问题:地图视图的中心在用户位置和手势识别器运行时的位置之间频繁交替。也许我误解了你的答案?我已经在这里发布了我的
uipangestrerecognizer
子类的实现:这就成功了!我很高兴解决方案如此简单。谢谢,斯科特。
    UIPanGestureRecognizer *pan = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizePan)] autorelease];
    pan.delegate = self;
    [self.mapView addGestureRecognizer:pan];