#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. Да, но я хочу, чтобы мое нажатие кнопки определяло точку для фигуры (готово), но создавало фигуру в каждой точке, которую я определяю