2014-11-14 2 views
0

Я пытаюсь рисовать некоторые дуги и круги с использованием Core Graphics. Я использую новый интерфейс Builder функции IBDesignable/IBInspectable, чтобы увидеть мой просмотр в реальном времени, и он просто действует так, как следует в Interface Builder. Очень просто говоря, вот мой код, который рисует круг:Ядро Графические рисунки неправильно масштабируются и транслируются на устройстве, но в интерфейсе Builder

-(void)drawCircleInRect:(CGRect)rect{ 
    [self.circleColor setFill]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.frame]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextClearRect(context, rect); 

    // If you have content to draw after the shape, 
    // save the current state before changing the transform. 
    CGContextSaveGState(context); 

    [path fill]; 

    // Restore the graphics state before drawing any other content. 
    CGContextRestoreGState(context); 
} 

Я звоню это в drawRect: и self.circleColor является IBInspectable собственности UIColor, который я поставил на белый. Вот результат, без проблем:

enter image description here

Однако, когда я бегу на тренажере или устройства (пробовал оба результат один и тот же), это то, что я получаю:

enter image description here

Это как масштабированный/неправильно расположенный на вид, и поэтому обрезается. Почему это может быть? Это как 2x. Если бы это было наоборот, я бы предположил, что это связано с масштабным коэффициентом Retina, но это все наоборот. Он слишком сильно затягивается в сетчатом устройстве и черпает нормальное изображение на моем адаптере интерфейса Mac's без сетчатки. Какие-либо предложения?

(нижняя черная полоса фактически панель вкладок, что я отключился, нет ничего ненормального там)

ответ

1

Проверить эту линию:

UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.frame]; 

Это должно быть self.bounds, не self.frame ,

+0

Спасибо, сменив 'frame' на' bounds', решила проблему. Любые предложения по * почему * он решает, хотя? –

+1

frame.origin - это источник вашего представления внутри своего супервизора. bounds.origin - это (обычно) верхний левый угол вашего представления (0,0). См. Http://stackoverflow.com/questions/1210047/cocoa-whats-the-difference-between- the-frame-and-the-bounds – Darren

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