下面的代码是旋转一个图片的category
(UIImage*)imageRotatedByDegrees:(CGFloat)degrees
{CGFloat width = CGImageGetWidth(self.CGImage);
CGFloat height = CGImageGetHeight(self.CGImage);CGSize rotatedSize;
rotatedSize.width = width;
rotatedSize.height = height;UIGraphicsBeginImageContext(rotatedSize);
//下面代码得到的坐标系是原点在设备左下角的坐标系
CGContextRef bitmap = UIGraphicsGetCurrentContext();
//由于要进行旋转,而旋转又是相对于原点的,所以先要获得的图片的整体的旋转中心必须在原点,由下面语句完成
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
//旋转度(相对于原点(0,0)),所以说旋转点必须是旋转过后的中心点
//下面是真正执行旋转的语句,正值是顺时针旋转
CGContextRotateCTM(bitmap, degrees * M_PI / 180);
//下面两句是讲原点在左下角的坐标系转换成原点在左上角的坐标系,先顺时针旋转180度,x指向左,y指向下
CGContextRotateCTM(bitmap, M_PI);
//然后将x轴翻转180度指向右
CGContextScaleCTM(bitmap, -1.0, 1.0);
//此时的原点在图片的正中心,x向右,y向下,所以在绘画的时候rect变为负的相当于,坐标系向上向左平移了一半,原点刚好落在左上角,此时的坐标系刚好是UIKit和Annimation的坐标系
CGContextDrawImage(bitmap, CGRectMake(-rotatedSize.width/2, -rotatedSize.height/2, rotatedSize.width, rotatedSize.height), self.CGImage);
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}