Ошибка недопустимого содержимого при рисовании UIBezierPath

Я пытаюсь сделать простой круг в viewdidload с помощью следующего кода:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIBezierPath* aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100,100) radius:100 startAngle:M_PI/6 endAngle:M_PI clockwise:YES];


    [aPath fill];
}

Я получаю следующую ошибку:

CGContextSaveGState: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context  and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

Я знаю, что эта проблема уже обсуждается здесь Но не могу относиться. Ошибка возникает в

[aPath fill];

Связано ли это с жизненным циклом приложения?


person Umair Khan Jadoon    schedule 01.03.2014    source источник
comment
Ваша программа работает правильно, кроме регистрации этой ошибки?   -  person nhgrif    schedule 02.03.2014
comment
Он показывает пустой вид. Круга нет. Однако приложение не вылетает.   -  person Umair Khan Jadoon    schedule 02.03.2014


Ответы (1)


Ошибка означает, что у вас нет контекста, в который можно было бы провести путь, и он у вас должен быть.

Поскольку этот код находится в контроллере представления, вам нужно решить, в какой контекст вы должны рисовать.

Вы можете сами создать контекст и нарисовать в нем свой путь, что было бы полезно, например, если вы хотите создать изображение, содержащее путь. Это можно сделать с помощью CGBitmapContextCreate.

Или, и, возможно, более того, что вы ищете, путем рисования пути в контексте представления контроллеров представления. Это доступно в методе drawRect:. Итак, вы должны реализовать это в своем подклассе пользовательского представления и переместить туда свой код.

Альтернативой является использование CAShapeLayer, созданного с помощью пути (с использованием CGPath), и добавление его в качестве подслоя уровня представлений контроллеров представления. Тогда вам совсем не нужно беспокоиться о контексте ...

person Wain    schedule 01.03.2014
comment
Спасибо. Добавлен пользовательский UIView и эти строки добавлены в метод drawrect. Могу ли я использовать прямую отрисовку основного вида? - person Umair Khan Jadoon; 02.03.2014
comment
Если вы сделаете основной вид своего пользовательского класса, да (в методе XIB / storyboard / loadView) - person Wain; 02.03.2014