图片处理-缩放旋转裁剪

2016-02-16  本文已影响400人  大王_小王

嗦嘶话,第一次见到这个需求的时候,感觉很简单。不就是缩放,然后裁剪吗,加个旋转和快速恢复。

但似。做的时候,可就不这么想了。

因为:我要做的需要有弹簧效果,这就需要scroll做容器了。然而,调试缩放完后去切图,可就找不到原点了。裁剪出来的乱七八糟的。

找了很多github上的缩放的案例,没有一个合适的。只好自己造轮子了。

造出来之后,挺简单,这玩意儿就跟0->1似的,逻辑不跑通,你永远隔河远望,等你过了河,就觉得其实没啥。不废话,说思路:

缩放+裁剪+旋转+快速缩放-->见大家APP晒呗首页右上角按钮点击。

思路:

一:最下层是一个view,做总容器--我称之为绘图层

   {// 绘图方法
  #pragma mark - 绘制画布上的图

-(UIImage *)getScreenSnapshot{

CGSize imgSize = CGSizeMake(kSCREEN_WIDTH,kSCREEN_WIDTH);

UIGraphicsBeginImageContextWithOptions(imgSize, NO, [UIScreen mainScreen].scale);

//    UIGraphicsBeginImageContext(imgSize);

CGContextRef context = UIGraphicsGetCurrentContext();

[self.contextRefView.layer renderInContext:context];

UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return img;

}
#pragma mark -剪切某图片某区域的图片

- (UIImage *)image:(UIImage *)image cropInRect:(CGRect)rect

{// 这个没用到

CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);

UIImage *cropped = [UIImage imageWithCGImage:imageRef];

CGImageRelease(imageRef);

return cropped;
}
}

二:倒数第二层,旋转层,还是一个uiview,用来旋转

旋转方法:

-(void)rotationImage:(UIButton *)sender{

NSInteger swich = self.direction%4;// 记得初始化

[UIView animateWithDuration:0.3 animations:^{

self.contentView.transform = CGAffineTransformMakeRotation(-90*swich *M_PI / 180.0);// 度数和速度自调

}];

self.direction++;//控制方向变化

}

三:再上一层,缩放层,放scrollview,手势缩放和快速缩放使用

#pragma mark - UIScrollViewDelegate

- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{

return self.showImage;

}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView

{

CGFloat xcenter = scrollView.center.x , ycenter = scrollView.center.y;

//目前contentsize的width是否大于原scrollview的contentsize,如果大于,设置imageview中心x点为contentsize的一半,以固定imageview在该contentsize中心。如果不大于说明图像的宽还没有超出屏幕范围,可继续让中心x点为屏幕中点,此种情况确保图像在屏幕中心。

xcenter = scrollView.contentSize.width >     scrollView.frame.size.width ? scrollView.contentSize.width/2 : xcenter;

ycenter = scrollView.contentSize.height > scrollView.frame.size.height ? scrollView.contentSize.height/2 : ycenter;

[self.showImage setCenter:CGPointMake(xcenter, ycenter)];

}

快速缩放使用了巧招

-(void)sizeBtnImage:(UIButton *)sender{

if (self.isScaleFit) {

self.scrollView.zoomScale = fillScale;// 这个比例为按短边填满,长边等比放大。

self.isScaleFit = NO;

}else{

self.scrollView.zoomScale = fitScale;// 这个比例为按长边填满,短边等比缩小。

self.isScaleFit = YES;
}
}

就是酱紫了,OK了

上一篇下一篇

猜你喜欢

热点阅读