2
我使用MkCircle声明位置现在我必须将MK位置中的圆圈位置改为另一个位置(拖动&拖放)。我怎么能做到这一点。任何帮助将不胜感激。如何将MKCircleView在一个位置移动到MKMapView中的另一个位置?
我使用MkCircle声明位置现在我必须将MK位置中的圆圈位置改为另一个位置(拖动&拖放)。我怎么能做到这一点。任何帮助将不胜感激。如何将MKCircleView在一个位置移动到MKMapView中的另一个位置?
首先,我建议你有一些类属性来跟踪覆盖的:
@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
必须关闭此手势才能被识别。