Skip to content

Instantly share code, notes, and snippets.

@aitskovi
Created March 4, 2011 05:03
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aitskovi/854201 to your computer and use it in GitHub Desktop.
Save aitskovi/854201 to your computer and use it in GitHub Desktop.
A pannable, rotatable and zoomable image with gesture recognizers.
- (id)initWithImage:(UIImage *)image {
if ((self = [super initWithImage:image])) {
self.userInteractionEnabled = YES;
self.multipleTouchEnabled = YES;
_pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchRecognized:)];
[self addGestureRecognizer:_pinchGestureRecognizer];
_pinchGestureRecognizer.delegate = self;
_panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRecognized:)];
[self addGestureRecognizer:_panRecognizer];
_panRecognizer.delegate = self;
_rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationRecognized:)];
[self addGestureRecognizer:_rotationRecognizer];
_rotationRecognizer.delegate = self;
}
return self;
}
#pragma mark -
#pragma mark Touch Handling
- (void)pinchRecognized:(UIPinchGestureRecognizer *)gestureRecognizer {
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateChanged:
case UIGestureRecognizerStateRecognized:
self.transform = CGAffineTransformScale(self.transform, gestureRecognizer.scale, gestureRecognizer.scale);
[gestureRecognizer setScale:1.0];
break;
default:
break;
}
}
- (void)panRecognized:(UIPanGestureRecognizer *)gestureRecognizer {
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateChanged:
case UIGestureRecognizerStateRecognized:
CGPoint translation = [gestureRecognizer translationInView:self.superview];
self.center = CGPointMake(self.center.x + translation.x, self.center.y + translation.y);
[gestureRecognizer setTranslation:CGPointZero inView:self.superview];
break;
default:
break;
}
}
- (void)rotationRecognized:(UIRotationGestureRecognizer *)gestureRecognizer {
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateChanged:
case UIGestureRecognizerStateRecognized:
CGFloat angle = [gestureRecognizer rotation];
self.transform = CGAffineTransformRotate(self.transform, angle);
[gestureRecognizer setRotation:0];
break;
default:
break;
}
}
# pragma mark -
# pragma mark UITapGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment