Я создал довольно простую заставку, которая без проблем работает на Mac OS 10.6.5.
На экране конфигурации накопилось довольно много разных опций, и я пытаюсь реализовать свой собственный предварительный просмотр в окне configureSheet, чтобы пользователь (только я, в настоящее время) мог сразу же увидеть эффект от изменения, не нажимая OK и Test. каждое изменение.
Я добавил NSView
в configureSheet и установил пользовательский класс в Интерфейсном Разработчике для моего подкласса ScreenSaverView. Я знаю, что drawRect:
запускается, потому что я могу удалить условие очистки представления для черного, и мой предварительный просмотр больше не отображается на черном фоне.
Вот эта функция (на основе нескольких прекрасных уроков в Интернете):
- (void)drawRect:(NSRect)rect
{
if ( shouldDrawBackground )
{
[super drawRect:rect];
shouldDrawBackground = NO;
}
if (pausing == NO)
[spiroForm drawForm];
}
Класс spiroForm просто встраивается в кадр ScreenSaverView, используя NSBezierPath
, и, как уже упоминалось, не представляет проблем для фактической заставки или встроенного предварительного просмотра системных настроек. Пользовательский кадр предварительного просмотра (configureView) передается в метод init для самой себя (поскольку его пользовательский класс - мой подкласс ScreenSaverView.) Метод -initWithFrame
вызывается в configureSheet перед возвратом объекта configureSheet в ОС:
[configureView initWithFrame:[configureView bounds] isPreview:YES];
Может быть, мне не нужно этого делать? Я пытался понять, нужно ли это для рисования.
В конце концов я добавил делегата в configureSheet, чтобы попытаться вызвать функции startAnimation
и stopAnimation
моего предварительного просмотра с помощью уведомлений windowWillBeginSheet
и windowWillEndSheet
, но по некоторым причинам их не вызывают. Делегат объявлен как NSObject <NSWindowDelegate>
, и я задал его в методе configureSheet перед возвратом объекта configureSheet.
Я работал над этим в течение нескольких дней, но не смог ничего найти о том, как ОС управляет объектами ScreenSaverView (что я думаю, это то, что я пытаюсь эмулировать, запустив свою собственную копию).
У кого-нибудь есть какие-либо предложения о том, как управлять этим, или если Apple что-то документирует, чего я не нашел? На самом деле это не требуется для работы заставки, я просто думаю, что это будет весело (я также искал способ использовать предварительный просмотр ОС, но он заблокирован, пока активирован configureSheet.)