let image = board.image!
//水平翻转let flipImageOrientation = (image.imageOrientation.rawValue + 4) % 8let flipImage = UIImage(CGImage: image.CGImage!, scale: image.scale, orientation: UIImageOrientation(rawValue: flipImageOrientation)!)board.image = flipImage
/******* 另外一种水平镜像翻转的写法 ***********/ //Quartz重绘图片let rect = CGRectMake(0, 0, image .size.width , image .size.height);//创建矩形框//根据size大小创建一个基于位图的图形上下文UIGraphicsBeginImageContext(rect.size)// UIGraphicsBeginImageContextWithOptions(rect.size, false, 2)let currentContext = UIGraphicsGetCurrentContext();//获取当前quartz 2d绘图环境CGContextClipToRect(currentContext, rect);//设置当前绘图环境到矩形框CGContextRotateCTM(currentContext, CGFloat(M_PI)); //旋转180度//平移, 这里是平移坐标系,跟平移图形是一个道理CGContextTranslateCTM(currentContext, -rect.size.width, -rect.size.height);CGContextDrawImage(currentContext, rect, image .CGImage);//绘图//翻转图片let drawImage = UIGraphicsGetImageFromCurrentImageContext();//获得图片
//垂直翻转var flipImageOrientation = (image.imageOrientation.rawValue + 4) % 8flipImageOrientation += flipImageOrientation%2==0 ? 1 : -1let flipImage = UIImage(CGImage:image.CGImage!,scale:image.scale,orientation:UIImageOrientation(rawValue: flipImageOrientation)!)board.image = flipImage
//顺时针旋转up -> right -> down -> left -> up
//逆时针旋转up -> left -> down -> right -> up
这其中的规律能否不用switch 而用rawValue来表示,待明天来继续研究
- (IBAction)btnClicked:(id)sender {UIImage * image = _imageView.image;_imageView.image = nil;//逆时针UIImageOrientation orientation = image.imageOrientation;switch (orientation) {case UIImageOrientationUp:orientation = UIImageOrientationLeft;break;case UIImageOrientationLeft:orientation = UIImageOrientationDown;break;case UIImageOrientationDown:orientation = UIImageOrientationRight;break;case UIImageOrientationRight:orientation = UIImageOrientationUp;break;default:break;}_imageView.image = [self image:image rotation:orientation];}- (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation{long double rotate = 0.0;CGRect rect;float translateX = 0;float translateY = 0;float scaleX = 1.0;float scaleY = 1.0;switch (orientation) {case UIImageOrientationLeft:rotate = M_PI_2;rect = CGRectMake(0, 0, image.size.height, image.size.width);translateX = 0;translateY = -rect.size.width;scaleY = rect.size.width/rect.size.height;scaleX = rect.size.height/rect.size.width;break;case UIImageOrientationRight:rotate = 3 * M_PI_2;rect = CGRectMake(0, 0, image.size.height, image.size.width);translateX = -rect.size.height;translateY = 0;scaleY = rect.size.width/rect.size.height;scaleX = rect.size.height/rect.size.width;break;case UIImageOrientationDown:rotate = M_PI;rect = CGRectMake(0, 0, image.size.width, image.size.height);translateX = -rect.size.width;translateY = -rect.size.height;break;default:rotate = 0.0;rect = CGRectMake(0, 0, image.size.width, image.size.height);translateX = 0;translateY = 0;break;}UIGraphicsBeginImageContext(rect.size);CGContextRef context = UIGraphicsGetCurrentContext();//做CTM变换CGContextTranslateCTM(context, 0.0, rect.size.height);CGContextScaleCTM(context, 1.0, -1.0);CGContextRotateCTM(context, rotate);CGContextTranslateCTM(context, translateX, translateY);CGContextScaleCTM(context, scaleX, scaleY);//绘制图片CGContextDrawImage(context, CGRectMake(0, 0, rect.size.width, rect.size.height), image.CGImage);UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();return newPic;}