2014-12-31 2 views
0

У меня есть простой bezierPath с 2 элементами в NSView; Я хочу изменить последний элемент (NSPoint) на нажатой кнопке, но мой код не имеет никакого визуального эффекта на пути. Вот мой код в NSView подкласса:Редактирование какао NSBezierPath

NSBezierPath *path;  
    - (void)drawRect:(NSRect)dirtyRect { 
     [super drawRect:dirtyRect]; 
     // Drawing code here. 

     path = [NSBezierPath bezierPath]; 
     [path moveToPoint:NSMakePoint(0, 0)]; 
     [path lineToPoint:NSMakePoint(60, 60)]; 
     [path setLineWith:2.0]; 
     [[NSColor redColor] set]; 
     [path stroke]; 
     //the path is correctly drawing and visible 
    } 

    - (IBAction)buttonPressed:(id)sender { 
     NSPoint newPoint = NSMakePoint(120, 120); 
     [path setAssociatedPoints:&newPoint atIndex:1]; //has no visible effect 
    } 

любое предложение?

ответ

1

Каждый раз, когда вы вызываете drawRect:, вы создаете новый путь и рисуете его. Затем на кнопке нажмите, чтобы изменить путь.

Так у вас есть 2 проблемы:

  1. Вы держать воссоздавать путь - просто создать его один раз, когда создается представление
  2. Вы не перерисовывать вид, когда путь обновляется - использовать setNeedsDisplay
+0

Благодарим вас за поддержку. Я решил добавить setNeedsDisplay: ДА – mattiad

0

Вы каждый раз воссоздаете путь Безье через свой метод -drawRect:. Таким образом, не имеет значения, что вы сохранили последний и изменили его. Вы отбрасываете это и создаете новый при следующем обращении.

Кроме того, если ваша переменная действительно объявлена ​​вне любых фигурных скобок ({ ... }), то это не переменная экземпляра. Это всего лишь глобальная переменная с файловой областью. Это означает, что он используется всеми экземплярами этого класса представлений.

Смежные вопросы