2014-11-20 3 views
1

У меня есть следующий код, чтобы создать разноцветное ImageContext:Как повернуть CGContext относительно центра?

UIGraphicsBeginImageContext(self.view.frame.size); 
[self.imageToDelete drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 

CGColorRef mycolor; 

mycolor = [[UIColor blueColor] CGColor]; 

CGPoint mid = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); 

CGContextMoveToPoint(UIGraphicsGetCurrentContext(), mid.x, mid.y); 


CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), mid.x, mid.y+50); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(),3); 
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy); 
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), mycolor); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 
CGContextFlush(UIGraphicsGetCurrentContext()); 

mycolor = [[UIColor whiteColor] CGColor]; 
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), mid.x, mid.y+50); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), mid.x, mid.y+75); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(),3); 
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy); 
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), mycolor); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 
CGContextFlush(UIGraphicsGetCurrentContext()); 

mycolor = [[UIColor cyanColor] CGColor]; 
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), mid.x, mid.y+75); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), mid.x, mid.y+100); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(),3); 
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy); 
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), mycolor); 

CGContextStrokePath(UIGraphicsGetCurrentContext()); 
CGContextFlush(UIGraphicsGetCurrentContext()); 

self.imageToDelete = UIGraphicsGetImageFromCurrentImageContext(); 

[self.mainImage drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeCopy alpha:1.0]; 
[self.imageToDelete drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:1]; 
self.mainImage = UIGraphicsGetImageFromCurrentImageContext(); 

SKSpriteNode *node = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImage:self.mainImage]]; 
node.zPosition = 100; 
node.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); 
node.size = self.mainImage.size; 
[self addChild:node]; 

UIGraphicsEndImageContext(); 

Это результат:

result

Я хотел бы, чтобы повернуть эту линию относительно центра экрана (или верхней части этой строки), а также сохранить исходную строку. Есть ли способ сделать копию и повернуть ее относительно центральной точки? Чтобы уточнить, mid является CGPoint, определяемым как (self.view.frame.size.width/2,self.view.frame.size.height/2), и это делается в Sprite-Kit, iOS, Objective-C.

ответ

2

Вращение вокруг источника. Чтобы повернуть вокруг другой точки, переведите эту точку в начало координат, поверните и переведите назад.

+1

Пример кода здесь: http://www.apeth.com/iOSBook/ch15.html#_graphics_context_transforms – matt

Смежные вопросы