模拟系统照相机图片裁剪的功能
效果如下:
源码:
//
// 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的代理方法中传递出去
至于这有怎么样的用处,如果有需求需要你截取图片的某一个区域,这时候你就知道有啥用了:)