Проблема при рисовании квадрата в примере приложения - PullRequest
1 голос
/ 10 июля 2011

Привет, я делаю пример приложения, в котором я хочу создать квадрат, для которого я использовал следующий код

- (void)viewDidLoad {
    [super viewDidLoad];
    [self drawRect:CGRectMake(0, 0, 300, 200)];
    [[self view] setNeedsDisplay];
}
- (void) drawRect:(CGRect)rect
{
    NSLog(@"drawRect");

    CGFloat centerx = rect.size.width/2;
    CGFloat centery = rect.size.height/2;
    CGFloat half = 100/2;
    CGRect theRect = CGRectMake(-half, -half, 100, 100);

    // Grab the drawing context
    CGContextRef context = UIGraphicsGetCurrentContext();

    // like Processing pushMatrix
    CGContextSaveGState(context);
    CGContextTranslateCTM(context, centerx, centery);

    // Uncomment to see the rotated square
    //CGContextRotateCTM(context, rotation);

    // Set red stroke
    CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);

    {
        CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1.0);
    }
    // Draw a rect with a red stroke
    CGContextFillRect(context, theRect);
    CGContextStrokeRect(context, theRect);

    // like Processing popMatrix
    CGContextRestoreGState(context);
    [[self view] setNeedsDisplay];

}

Но на экране ничего не нарисовано, не знаю, где проблема. Когда я отлаживаюесли контекст CGContextRef всегда был 0x0, я не знаю, почему его 0x0 всегда пропускает что-то в моем коде.

Ответы [ 2 ]

4 голосов
/ 10 июля 2011

Похоже, вы пытаетесь нарисовать в подклассе UIViewController. Вам необходимо создать подкласс UIView, чтобы переопределить метод drawRect:, который затем вызывается автоматически с правильным графическим контекстом. Вы почти никогда не вызываете этот метод самостоятельно.

1 голос
/ 10 июля 2011

Цитировать документы Apple:

"Для рисования на экране в приложении iOS вы устанавливаете объект UIView и реализуете его метод drawRect: для выполнения рисования. DrawRect: метод представления вызывается, когда представление отображается на экране, и его содержимое требует обновления. При вызове пользовательского метода drawRect: объект представления автоматически настраивает свою среду рисования, чтобы ваш код мог немедленно начать рисование. В рамках этой конфигурации объект UIView создает графический контекст (непрозрачный тип CGContextRef) для текущей среды рисования. получить этот графический контекст в вашем методе drawRect: путем вызова функции UIKit UIGraphicsGetCurrentContext. "

Итак, ваш код находится на правильном пути, вам просто нужно получить его в нужном месте. Он должен быть в объекте просмотра.

...