MKMapView - (, ) (, ) , . . , , -, , .
, , :
-(void)mapView:(MKMapView *)pMapView regionDidChangeAnimated:(BOOL)animated MKMapViewDelegate Protocol Reference - .UIPinchGestureRecognizer MKMapView .
№1 - mapView:regionDidChangeAnimated: , - , , . , .
№ 2 - a UIPinchGestureRecognizer MKMapView, . , . , .
:
- (void)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;
, . . : "UIMapView: UIPinchGestureRecognizer " . , shouldRecognizeSimultaneouslyWithGestureRecognizer: YES.
:
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.mapType = MKMapTypeStandard;
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
pinchRecognizer.delegate = self;
[self.mapView addGestureRecognizer:pinchRecognizer];
[pinchRecognizer release];
}
#pragma mark -
#pragma mark UIPinchGestureRecognizer
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)pinchRecognizer {
if (pinchRecognizer.state != UIGestureRecognizerStateChanged) {
return;
}
MKMapView *aMapView = (MKMapView *)pinchRecognizer.view;
for (id <MKAnnotation>annotation in aMapView.annotations) {
if ([annotation isKindOfClass:[MKUserLocation class]])
return;
if ([annotation isKindOfClass:[MKPointAnnotation class]])
{
MKAnnotationView *pinView = [aMapView viewForAnnotation:annotation];
[self formatAnnotationView:pinView forMapView:aMapView];
}
}
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
, . MKMapView.
:
- (void)formatAnnotationView:(MKAnnotationView *)pinView forMapView:(MKMapView *)aMapView {
if (pinView)
{
double zoomLevel = [aMapView zoomLevel];
double scale = -1 * sqrt((double)(1 - pow((zoomLevel/20.0), 2.0))) + 1.1;
pinView.transform = CGAffineTransformMakeScale(scale, scale);
UIImage *pinImage = [UIImage imageNamed:@"YOUR_IMAGE_NAME_HERE"];
pinView.image = [pinImage resizedImage:CGSizeMake(pinImage.size.width * scale, pinImage.size.height * scale) interpolationQuality:kCGInterpolationHigh];
}
}
, .