CGFloat degreesToRadians(CGFloat degrees) { return degrees * M_PI / 180; }; @interface UIImage (Rotate) - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees; @end @implementation UIImage (Rotate) - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees { UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.size.width, self.size.height)]; CGAffineTransform t = CGAffineTransformMakeRotation(degreesToRadians(degrees)); rotatedViewBox.transform = t; CGSize rotatedSize = rotatedViewBox.frame.size; UIGraphicsBeginImageContext(rotatedSize); CGContextRef bitmap = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(bitmap, rotatedSize.width / 2, rotatedSize.height / 2); CGContextRotateCTM(bitmap, degreesToRadians(degrees)); CGContextScaleCTM(bitmap, 1.0, -1.0); CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]); UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } @end
- (UIImage *)resizeImage:(UIImage *)image scaledToSize:(CGSize)newSize { UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }
以下为绘制一个圆形,然后生成一个UIImageView,测试代码:
//start...
CAKeyframeAnimation* animation; animation = [CAKeyframeAnimation animation]; CGMutablePathRef path = CGPathCreateMutable(); NSLog(@"原点%f, 原点%f",imgview.layer.position.x,imgview.layer.position.y); CGPathMoveToPoint(path, NULL,imgview.layer.position.x,imgview.layer.position.y); int p = (int)[self getblank:tag]; NSLog(@"旋转%d, num:%d", p, (int)num); float f = 2.0*M_PI - 2.0*M_PI *p/PHOTONUM; float h = f + 2.0*M_PI *num/PHOTONUM; float centery = self.view.center.y - DY; float centerx = self.view.center.x; float tmpy = centery + RADIUS*cos(h); float tmpx = centerx - RADIUS*sin(h); imgview.center = CGPointMake(tmpx,tmpy); CGPathAddArc(path, nil, self.view.center.x, self.view.center.y - DY, RADIUS, f+ M_PI/2, f+ M_PI/2 + 2.0*M_PI *num/PHOTONUM,0); animation.path = path; //test start UIGraphicsBeginImageContext(self.view.bounds.size); CGContextRef gc = UIGraphicsGetCurrentContext(); CGContextAddPath(gc, path); [[UIColor colorWithRed:(arc4random()%255/255) green:(arc4random()%255/255) blue:(arc4random()%255/255) alpha:1.0] setStroke]; CGContextSetLineWidth(gc, 2); CGContextDrawPath(gc, kCGPathStroke); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageView *imgview2 = [[UIImageView alloc] initWithImage:image]; [self.view addSubview:imgview2]; //test end CGPathRelease(path);//end...