2016-01-31 11 views
0

Я пытаюсь иметь несколько эллипсов, центрированные с разными размерами и вращением вокруг их центра, но я получаю это:Почему мои эллипсы не в центре?

enter image description here

Моего площадка код до сих пор:

import UIKit 

func radians(x: Int)->CGFloat{ 
    let pi = M_PI 
    return CGFloat(pi * Double(x)/180.0) 
} 

let size = CGSize(width: 600, height: 600) 
UIGraphicsBeginImageContextWithOptions(size, true, 0.0) 

let context = UIGraphicsGetCurrentContext() 

CGContextSetStrokeColorWithColor(context, UIColor.whiteColor().CGColor); 

let center:CGPoint=CGPointMake(size.width/2, size.height/2) 

CGContextSetLineWidth(context, 2.0); 

var step=0 
while step<12{ 
var width:CGFloat = 25.0+CGFloat(step)*20.0 
var height:CGFloat = 100.0+CGFloat(step)*20.0 
CGContextRotateCTM(context, radians(10)) ; 
var circle:CGRect = CGRectMake(center.x-width/2,center.y-height/2,width,height); 


CGContextAddEllipseInRect(context, circle); 

CGContextStrokePath(context); 
    step++ 
} 

let image = UIGraphicsGetImageFromCurrentImageContext() 


UIGraphicsEndImageContext() 
+0

'CGContextRotateCTM' вращается вокруг (0, 0), а не центра. –

+0

См. Http://stackoverflow.com/q/5983090/4151918 –

+0

@LeoDabus CGRectMake (центр.x-ширина/2, center.y-height/2, ширина, высота); это точно, не так ли? –

ответ

0

Ожидаемый результат был:

enter image description here

И Я нашел решение после попытки SEVERAL.

import UIKit 

func radians(x: Int)->CGFloat{ 
    let pi = M_PI 
    return CGFloat(pi * Double(x)/180.0) 
} 

let size = CGSize(width: 300, height: 300) 
UIGraphicsBeginImageContextWithOptions(size, true, 0.0) 

let context = UIGraphicsGetCurrentContext() 

CGContextSetStrokeColorWithColor(context, UIColor.whiteColor().CGColor); 

let center:CGPoint=CGPointMake(size.width/2, size.height/2) 

CGContextSetLineWidth(context, 2.0); 
CGContextTranslateCTM(context, center.x, center.y) 
var step=0 
while step<12{ 
var width:CGFloat = 30.0+CGFloat(step)*CGFloat(step) 
var height:CGFloat = 50.0+CGFloat(step)*CGFloat(2*step) 

var circle:CGRect = CGRectMake(-width/2,-height/2,width,height) 
    CGContextRotateCTM(context, radians(step)) 

CGContextAddEllipseInRect(context, circle); 

CGContextStrokePath(context); 
    step++ 
} 

let image = UIGraphicsGetImageFromCurrentImageContext() 

UIGraphicsEndImageContext() 
+0

вы закончили тем, что использовали рамку, которую я сказал вам X минус половина ширины и Y минус половина высоты 'CGRectMake (-width/2, -height/2, width, height)' –

+0

Вы также должны использовать CGContextTranslateCTM для перемещения центра вращения в центр взгляда. Вы должны опубликовать объяснение с помощью своего нового кода. –