contentOffset的偏移量除以缩放的比例来获取裁剪图片的相对位置CGRect的起点坐标origin,通过裁剪框的大小(即size)除以缩放的比例来获得需要裁取的图片的CGRect的尺寸size
2.UIImageView的宽高之比必须和原UIImage的宽高之比相同,这样才能保证裁剪出来的图片比例正常不失真!裁剪框的大小可随意设定
float width = [[UIScreenmainScreen] bounds].size.width;
float height = [[UIScreenmainScreen] bounds].size.height;
//根据原始的UIImage的长宽比例计算显示在UIImageView上的图片应有高度
CGSize c = self.img.image.size;
float img_height = c.height*width/c.width;
//裁剪框的大小及设置
self.midsize =CGSizeMake(width, width*0.5);
self.midLabel.frame =CGRectMake(0, (height-60-self.midsize.height)/2, width, self.midsize.height);
self.midLabel.layer.borderColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.6].CGColor;
self.midLabel.layer.borderWidth = 1.0;
3.个人觉得比较关键的一点是UIImageView的起点(0,0)必须和裁剪框的起点相同,这样通过scrollView的contentOffset的偏移量除以缩放的比例才能得出裁减框相对于原图片(UIImage)的偏移量!不服来辩。
//裁剪方法算法上的实现
-(IBAction)clipImage:(id)sender{
CGPoint cg = self.scroll.contentOffset;
CGSize c = self.img.image.size;
//计算图片的放大倍数(缩放比例!)
float zoom = self.img.frame.size.width/c.width;
//求裁剪范围,偏移量和裁剪大小的计算,这里比较关键!通过scrollView的
contentOffset的偏移量除以缩放的比例来获取裁剪图片的相对位置CGRect的起点坐标origin,通过裁剪框的大小(即size)除以缩放的比例来获得需要裁取的图片的CGRect的尺寸size
CGRect rec = CGRectMake(cg.x/zoom, cg.y/zoom,self.midsize.width/zoom,self.midsize.height/zoom);
CGImageRef imageRef =CGImageCreateWithImageInRect([self.img.image CGImage],rec);
UIImage *clipImage = [[UIImagealloc]initWithCGImage:imageRef];
self.img_clip.image = clipImage;
}
}
//scrollView的代理方法,主要是关于缩放控件设置
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{ return self.img;
}
//停止缩放的时候即时改变scrollView的内容显示范围contentSize
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
if(scrollView.zoomScale==1){
float width = [[UIScreenmainScreen]bounds].size.width;
float height = [[UIScreenmainScreen]bounds].size.height;
CGSize c = self.img.image.size;
float img_height = c.height*width/c.width;
self.scroll.contentSize =CGSizeMake(width, img_height+(height-60-self.midsize.height));
}else{
CGSize s =self.scroll.contentSize;
float width = [[UIScreenmainScreen]bounds].size.width;
float height = [[UIScreenmainScreen]bounds].size.height;
CGSize c = self.img.image.size;
float img_height = c.height*width/c.width;
self.scroll.contentSize =CGSizeMake(s.width,s.width/width*(img_height)+(height-60-self.midsize.height));
}
}