Skip to content

Instantly share code, notes, and snippets.

@jflinter
Created November 20, 2013 20:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jflinter/7570649 to your computer and use it in GitHub Desktop.
Save jflinter/7570649 to your computer and use it in GitHub Desktop.
This shows how to use BDDROneFingerZoomGestureRecognizer to make a plain old MKMapView have one-handed zooming behavior.
//
// MapViewController.m
// MapViewScrollTest
//
// Created by Jack Flintermann on 11/20/13.
// Copyright (c) 2013 Jack Flintermann. All rights reserved.
//
#import <MapKit/MapKit.h>
#import <BDDROneFingerZoomGestureRecognizer/BDDROneFingerZoomGestureRecognizer.h>
#import "MapViewController.h"
@interface MapViewController ()<MKMapViewDelegate, UIGestureRecognizerDelegate>
@property(nonatomic) IBOutlet MKMapView *mapView;
@property(nonatomic) BDDROneFingerZoomGestureRecognizer *recognizer;
@property(nonatomic) MKCoordinateRegion lastRegion;
@end
@implementation MapViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate = self;
self.recognizer = [[BDDROneFingerZoomGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerZoomed:)];
self.recognizer.scaleFactor = 5.0f;
self.recognizer.delegate = self;
[self resetScale];
[self.mapView addGestureRecognizer:self.recognizer];
}
- (void) resetScale {
self.recognizer.scale = 1.0f;
self.lastRegion = self.mapView.region;
}
- (void) mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
UIGestureRecognizerState state = self.recognizer.state;
if (state != UIGestureRecognizerStateBegan && state != UIGestureRecognizerStateChanged && state != UIGestureRecognizerStateEnded) {
[self resetScale];
}
}
- (void) oneFingerZoomed:(BDDROneFingerZoomGestureRecognizer *)recognizer {
MKCoordinateSpan span = MKCoordinateSpanMake(self.lastRegion.span.latitudeDelta * recognizer.scale, self.lastRegion.span.longitudeDelta * recognizer.scale);
self.mapView.region = MKCoordinateRegionMake(self.lastRegion.center, span);
}
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment