У меня есть стандартный NSWindow
с панелью инструментов. Одним из элементов панели инструментов является пользовательский вид - в частности, NSTextField
. (Более конкретно, это приложение таймера - элементы управления таймера, а также цифровой дисплей находятся на панели инструментов, а другие вещи находятся в области содержимого окна. NSTextField
- это цифровой дисплей.)Какао: обновлять представления за пределами представления содержимого NSWindow при изменении размера окна в реальном времени?
Обычно, я просто обновлять таймер каждую секунду, изменяя свойство «stringValue
» NSTextField
, что заставляет его обновлять себя. Но во время изменения живого окна, несмотря на то, что выполняется код, обновляющий свойство «stringValue
» (который я проверил с NSLog
), NSTextField
не нарисовывается снова, пока не будет изменено размер окна. Между тем, материал внутри области содержимого полностью обновляет.
Я пробовал все способы, которыми я знаю, чтобы сообщить NSTextField
, чтобы нарисовать себя, но он просто отказывается до тех пор, пока живое изменение размера не будет выполнено. Есть идеи? Очевидно, что это должно быть возможно, так как панель инструментов будет изменяться вместе с остальной частью окна - так что вы могли бы подумать, что можно заставить ее перерисовать один или несколько своих subviews
, когда они перемещают их. Я предполагаю, что я могу взломать это вместе subclassing
что-то, но мой Cocoa-fu еще недостаточно силен, чтобы выяснить самый простой/самый правильный способ сделать это.
Заранее спасибо ...
EDIT: Я вроде понял, решение - это не большой, но он в основном работает на данный момент. Это в моих комментариях ниже.
Вы не упоминаете, как ваш триггер таймер. Вы пытались помещать код в фоновый поток? – trojanfoe
Попробуйте настроить делегат, когда NSWindow измените размер и сообщите 'NSTextField', чтобы перерисовать себя с помощью' setNeedsDisplay: 'или что-то еще. Если это не работает, то да, это, вероятно, проблема с потоком. – TheAmateurProgrammer
@trojanfoe (Повторяю мой предыдущий комментарий на случай, если вы захотите продолжить, поскольку я забыл пометить вас в первый раз ... извините, новичок в Stack Overflow.) Таймер запускается каждую секунду. Что он делает даже при изменении размера окна. Проблема в том, что когда я обновляю содержимое представления в ответ на таймер, изменения фактически не набираются до тех пор, пока не будет выполнено изменение живого изображения. Я надеюсь, что если не удастся справиться с дополнительными потоками ... если это единственное решение, я просто займусь отсутствием обновления во время изменения размера, что раздражает, но не является разбойником. – Matt