{
UIImage* srcImage;
CGFloat currentScale;
}
- (void)setupUI {
self.coverImage = [[UIImageView alloc] initWithFrame:CGRectZero];
[self.view addSubview:self.coverImage];
[self.coverImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.equalTo(self.coverImage.superview);
make.top.equalTo(self.navView.mas_bottom).offset(0);
make.height.equalTo(@((ScreenWidth*9/16)));
}];
self.coverImage.contentMode = UIViewContentModeCenter;
self.coverImage.backgroundColor = [UIColor grayColor];
self.coverImage.layer.masksToBounds = YES;
[self.coverImage setUserInteractionEnabled:YES];
[self.coverImage setMultipleTouchEnabled:YES];
// 捏合手势
UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
[self.coverImage addGestureRecognizer:pinchGestureRecognizer];
}
#pragma mark - 手势处理
// 处理缩放手势
- (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer
{
CGFloat scale = pinchGestureRecognizer.scale;
// 如果捏合手势刚刚开始
if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan)
{ // 计算当前缩放比
currentScale = self.coverImage.image.size.width / srcImage.size.width;
}
// 根据手势处理器的缩放比例计算图片缩放后的目标大小
CGSize targetSize = CGSizeMake(srcImage.size.width * scale * currentScale,
srcImage.size.height * scale * currentScale);
// 对图片进行缩放
self.coverImage.image = [srcImage scaleToSize:targetSize];
}
注:scaleToSize:是对图片进行缩放的方法, 是UIImage类的扩展
内部实现
- (UIImage *)scaleToSize:(CGSize)size {
UIGraphicsBeginImageContext(size);
[self drawInRect:CGRectMake(0,0, size.width, size.height)];
UIImage * scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}