#define ScreenWidth [UIScreen mainScreen].bounds.size.width #define ScreenHeight [UIScreen mainScreen].bounds.size.height #import "ViewController.h"
@interface ViewController ()
@property (nonatomic, assign) CGRect oldFrame;
@property (nonatomic, assign) CGRect largeFrame;
@property (nonatomic, assign) CGAffineTransform oldTransform;
@property (weak, nonatomic) IBOutlet UIView *RootView; @property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad { [super viewDidLoad]; [_imageView setMultipleTouchEnabled:YES]; [_imageView setUserInteractionEnabled:YES]; [_imageView setImage:[UIImage imageNamed:@"1"]]; _oldFrame = self.imageView.frame; _oldTransform = self.imageView.transform; _largeFrame = CGRectMake(0 - ScreenWidth, 0 - ScreenHeight, 3 * _oldFrame.size.width, 3 * _oldFrame.size.height); [self addGestureRecognizerToView:self.imageView]; }
- (void) addGestureRecognizerToView:(UIView *)view { UIRotationGestureRecognizer *rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateView:)]; [view addGestureRecognizer:rotationGestureRecognizer];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleClick:)]; [view addGestureRecognizer:tap]; UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)]; [view addGestureRecognizer:pinchGestureRecognizer]; UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)]; [view addGestureRecognizer:panGestureRecognizer]; }
- (void) rotateView:(UIRotationGestureRecognizer *)rotationGestureRecognizer { UIView *view = rotationGestureRecognizer.view; view.transform = CGAffineTransformRotate(view.transform, rotationGestureRecognizer.rotation); [rotationGestureRecognizer setRotation:0]; if (rotationGestureRecognizer.state == UIGestureRecognizerStateBegan || rotationGestureRecognizer.state == UIGestureRecognizerStateChanged) { } }
- (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer { UIView *view = pinchGestureRecognizer.view; if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) { view.transform = CGAffineTransformScale(view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale); if (_imageView.frame.size.width < _oldFrame.size.width) { _imageView.frame = _oldFrame; } if (_imageView.frame.size.width > 3 * _oldFrame.size.width) { _imageView.frame = _largeFrame; } pinchGestureRecognizer.scale = 1; } }
- (void) panView:(UIPanGestureRecognizer *)panGestureRecognizer { UIView *view = panGestureRecognizer.view; if (panGestureRecognizer.state == UIGestureRecognizerStateBegan || panGestureRecognizer.state == UIGestureRecognizerStateChanged) { CGPoint translation = [panGestureRecognizer translationInView:view.superview]; [view setCenter:(CGPoint){view.center.x + translation.x, view.center.y + translation.y}]; [panGestureRecognizer setTranslation:CGPointZero inView:view.superview]; } }
- (void)doubleClick:(UITapGestureRecognizer *)tapGestureRecognizer { UIView *view = tapGestureRecognizer.view; if (tapGestureRecognizer.state == UIGestureRecognizerStateEnded) { view.transform = _oldTransform; view.frame = _oldFrame; } }
|