let image = board.image!
//水平翻转
let flipImageOrientation = (image.imageOrientation.rawValue + 4) % 8
let 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) % 8
flipImageOrientation += flipImageOrientation%2==0 ? 1 : -1
let 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;
}