如何将 MKCircleView 的一个位置移动到 MKMapView 中的另一个位置?
Posted
技术标签:
【中文标题】如何将 MKCircleView 的一个位置移动到 MKMapView 中的另一个位置?【英文标题】:How to Move MKCircleView at one position to another position in MKMapView? 【发布时间】:2013-08-23 13:55:53 【问题描述】:我正在使用 MkCircle 声明位置 现在我必须在 MKMapView(拖放)中将圆形位置更改为另一个位置。我怎么能做到这一点。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:首先,我建议您使用一些类属性来跟踪覆盖:
@property (nonatomic, weak) MKCircle *overlay;
然后,定义一个UIPanGestureRecognizer
来执行拖放操作:
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.mapView addGestureRecognizer:pan];
要使手势可取消,您应该导入以下标头:
#import <UIKit/UIGestureRecognizerSubclass.h>
您需要为此手势识别器编写一个处理程序,为您拖动的位置添加一个覆盖并删除旧的(但如果手势没有从覆盖上开始,则取消该手势):
- (void)handlePan:(UIPanGestureRecognizer *)gesture
static CGPoint originalPoint;
if (gesture.state == UIGestureRecognizerStateBegan)
CGPoint point = [gesture locationInView:gesture.view];
CLLocationCoordinate2D tapCoordinate = [self.mapView convertPoint:point toCoordinateFromView:gesture.view];
CLLocation *tapLocation = [[CLLocation alloc] initWithLatitude:tapCoordinate.latitude longitude:tapCoordinate.longitude];
CLLocationCoordinate2D originalCoordinate = [self.overlay coordinate];
CLLocation *originalLocation = [[CLLocation alloc] initWithLatitude:originalCoordinate.latitude longitude:originalCoordinate.longitude];
if ([tapLocation distanceFromLocation:originalLocation] > [self.overlay radius])
gesture.state = UIGestureRecognizerStateCancelled;
return;
else
originalPoint = [self.mapView convertCoordinate:originalCoordinate toPointToView:gesture.view];
if (gesture.state == UIGestureRecognizerStateChanged)
CGPoint translation = [gesture translationInView:gesture.view];
CGPoint newPoint = CGPointMake(originalPoint.x + translation.x, originalPoint.y + translation.y);
CLLocationCoordinate2D newCoordinate = [self.mapView convertPoint:newPoint toCoordinateFromView:gesture.view];
MKCircle *circle = [MKCircle circleWithCenterCoordinate:newCoordinate radius:[self.overlay radius]];
[self.mapView addOverlay:circle];
[self.mapView removeOverlay:self.overlay];
self.overlay = circle;
注意,地图的scrollEnabled
必须关闭才能识别此手势。
【讨论】:
以上是关于如何将 MKCircleView 的一个位置移动到 MKMapView 中的另一个位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIImageVIew 实时移动到 UILabel 的位置?