模拟系统照相机图片裁剪的功能
效果如下:
源码:
// // RootViewController.m // ScrollView // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" @interface RootViewController ()<UIScrollViewDelegate> { BOOL tapped; } @property (nonatomic, strong) UIScrollView *scrollView; @property (nonatomic, strong) UIImageView *imageView; @property (strong, nonatomic) UITapGestureRecognizer *tapGesture; @end @implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; // scrollView { _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; [self.view addSubview:_scrollView]; _scrollView.center = self.view.center; _scrollView.delegate = self; _scrollView.layer.borderWidth = 2.f; _scrollView.layer.borderColor = [UIColor redColor].CGColor; _scrollView.layer.masksToBounds = NO; // 不显示滚动的条 _scrollView.showsHorizontalScrollIndicator = NO; _scrollView.showsVerticalScrollIndicator = NO; _scrollView.bouncesZoom = YES; _scrollView.minimumZoomScale = 1.f; _scrollView.maximumZoomScale = 10.f; _scrollView.contentMode = UIViewContentModeScaleAspectFit; } // 图片 _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; _imageView.image = [UIImage imageNamed:@"back"]; _imageView.contentMode = UIViewContentModeScaleAspectFit; [_scrollView addSubview:_imageView]; // 手势 _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; [_scrollView addGestureRecognizer:_tapGesture]; } - (void)tapRecognized:(id)sender { if (!tapped) { CGPoint tapPoint = [self.tapGesture locationOfTouch:0 inView:self.tapGesture.view]; CGRect zoomRect = [self zoomRectForScrollView:self.scrollView withScale:6.0f withCenter:tapPoint]; [self.scrollView zoomToRect:zoomRect animated:YES]; tapped = YES; } else { [self.scrollView setZoomScale:1.0f animated:YES]; tapped = NO; } } - (CGRect)zoomRectForScrollView:(UIScrollView *)scrollView withScale:(float)scale withCenter:(CGPoint)center { CGRect zoomRect; zoomRect.size.height = scrollView.frame.size.height / scale; zoomRect.size.width = scrollView.frame.size.width / scale; zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0); zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0); return zoomRect; } #pragma mark - UIScrollView代理方法 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.imageView; } @end
一个需要注意的地方:
需要将图片的view在UIScrollView的代理方法中传递出去
至于这有怎么样的用处,如果有需求需要你截取图片的某一个区域,这时候你就知道有啥用了:)