2015-01-30 3 views
0

я, вероятно, пропустить что-то очевидное, но ...NSView с NSBezierPath не обновляется после изменения размера окна

У меня есть простой NSView:

class TestView : NSView { 

    override func drawRect(dirtyRect: NSRect) { 
    let path = NSBezierPath() 
    path.moveToPoint(NSPoint(x: 0 ,y: 0)) 
    path.lineToPoint(NSPoint(x: frame.size.width, y: 0)) 
    path.lineToPoint(NSPoint(x: frame.size.width, y: frame.size.height)) 
    path.lineToPoint(NSPoint(x: 0 ,y: frame.size.height)) 
    path.lineToPoint(NSPoint(x: 0 ,y: 0)) 
    path.lineWidth = 1 
    path.stroke() 
    } 
} 

Это помещается подошву в окно. Контроллер имеет окно

func windowDidEndLiveResize(notification: NSNotification) { 
    var frame = textFrame 
    frame.size.height = window!.frame.size.height - 60 
    frame.size.width = window!.frame.size.width - 40 
    field.frame = frame 
    field.needsDisplay = true 
} 

где frame является размер рамы на окна нагрузки и field моя TestView. Так что, когда я начинаю мое приложение будет рисовать рамку красиво, как и ожидалось:

enter image description here

Но при масштабировании вниз

enter image description here

оказывается, что представление не стирается и оставляет артефакты на окно. Это, наверное, нечто тривиальное, но в настоящее время я слепой.

ответ

0

Попробуйте получить надзор, чтобы перерисовать и очистить этот визуальный артефакт, используя field.superview?.needsDisplay = true.

В зависимости от ваших целей вы можете использовать вместо этого windowDidResize(notification: NSNotification), который будет постоянно обновлять представление при изменении размера окна.

+0

Ничего себе. Я знал, что это просто. Я был уверен, что супервизор уже знал о needsDisplay. Очевидно, это не так. Благодаря :-) –

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