Центрировать круг CAShapeLayer в середине экрана

Я рисую круг через CAShapeLayer, теперь я хочу, чтобы мой круг был в центре экрана. Средняя точка круга должна быть средней точкой моего зрения.

Вот как я сейчас пытаюсь это сделать:

- (void)_initCircle {
    [_circle removeFromSuperlayer];
    _circle = [CAShapeLayer layer];
    _radius = 100;

    // Create a circle
    _circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0 * _radius, 2.0 * _radius) cornerRadius:_radius].CGPath;

    // Center the shape in self.view
    _circle.position = CGPointMake(CGRectGetMidX(self.view.bounds) - _radius,
                                   CGRectGetMidY(self.view.bounds) - _radius);

    _circle.fillColor = [UIColor clearColor].CGColor;
    _circle.lineWidth = 5;

    // Add to parent layer
    [self.view.layer addSublayer:_circle];
}

На снимке экрана видно, что окружность не идеальна посередине, потому что метка находится в центре экрана (по центру Y). Где синий и черный круг, который должен быть равен метке, я думаю.

введите здесь описание изображения

Я не вижу ошибки расчета, кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ:

Изменение границ кадра и отключение радиуса дает мне такой результат:

введите здесь описание изображения


person user1007522    schedule 24.03.2015    source источник


Ответы (2)


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

// Center the shape in self.view
_circle.position = self.view.center;
_circle.anchorPoint = CGPointMake(0.5, 0.5);
person Gorka    schedule 24.03.2015
comment
Это дает мне тот же результат, что и второй скриншот. - person user1007522; 24.03.2015

person    schedule
comment
Это просто жестко запрограммирует его, так что на других экранах это, возможно, не сработает? - person user1007522; 24.03.2015