Рисование Objective-C без drawRect: фигуры не будут отображаться

#objective-c #drawing #draw #nsbezierpath

#objective-c #рисование #nsbezierpath

Вопрос:

У меня есть класс под названием MapWindow, который подключен к окну в IB.

Несмотря ни на что, красный круг, который я хочу, чтобы программа отобразила, не будет отображаться, если код не находится в drawRect или я не перемещаю границы окна. Окно не обновляется даже без разблокировки и блокировки фокуса.

На самом деле Another Windowview — это NSView, подключенный к пользовательскому представлению в IB.

 - (void)test
{
    [theOtherWindowView lockFocus];
    NSBezierPath *path = [NSBezierPath bezierPath];
    NSPoint center = [self drawPoint];
    [path moveToPoint: center];
    [path appendBezierPathWithArcWithCenter:center
                                        radius:explosionRadius
                                    startAngle:0
                                    endAngle:360];
    [[NSColor redColor] set];
    [path fill];

    [theOtherWindowView unlockFocus];
}
  

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

Я также пробовал [self lockFocus] и [mapWindow lockFous]

Ответ №1:

Продолжайте рисовать в -drawRect: . После -drawRect: отправки система координат вашего вида и границы обрезки будут настроены для вас, и контекст рисования вашего окна будет текущим.

В этом методе нарисуйте столько этих кругов, сколько захотите.

Комментарии:

1. Нет, потому что drawrect можно вызвать только через setNeedsDisplay: YES, что позволяет копировать один объект, а не несколько копий.

2. @evdude100, ты видишь, как можно нарисовать несколько путей в одном вызове drawRect: ?

3. Да, но я хочу, чтобы мое нажатие кнопки определяло точку для фигуры (готово), но создавало фигуру в каждой точке, которую я определяю