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...
本文演示了如何使用Objective-C编程语言绘制一个圆形,并通过旋转实现动态效果。包括使用CAKeyframeAnimation进行路径动画设置,以及利用UIKit框架中的方法进行图形绘制与旋转操作。
1万+

被折叠的 条评论
为什么被折叠?



