Я пытаюсь создать подкласс NSScroller, чтобы нарисовать собственную ручку скроллера.Для этого я использую подкласс NSScrollView и использую следующий код для создания своих пользовательских NSScrollers:
- (void)awakeFromNib;
{
NSRect horizontalScrollerFrame = [[self horizontalScroller] frame];
NSRect verticalScrollerFrame = [[self verticalScroller] frame];
NSString *scrollBarVariant = [[[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain] valueForKey:@"AppleScrollBarVariant"];
if (![scrollBarVariant isEqualToString:@"DoubleBoth"]) {
[self setVerticalScroller:[[[TRScroller alloc] initWithFrame:verticalScrollerFrame] autorelease]];
[self setHorizontalScroller:[[[TRScroller alloc] initWithFrame:horizontalScrollerFrame] autorelease]];
}
}
Это работает, и мои NSScrollers отображаются правильно.Но я иногда вижу проблемы с рендерингом при первой загрузке приложения.В Интерфейсном Разработчике я выложил несколько NSScrollViews с их полосами прокрутки, настроенными на автоматическое скрытие.Проблема, с которой я сталкиваюсь, заключается в том, что при первой загрузке приложения фоны полосы прокрутки отображаются в содержимом NSScrollViews.
alt text http://www.freeimagehosting.net/uploads/1d3fc75db8.png
Я считаю, что это потому, что я создаю экземпляр своего NSScrollподкласс (TRSubclass) через awakeFromNib, что означает, что полосам прокрутки присваивается кадр NSScrollView, прежде чем он автоматически изменяется в соответствии с сохраненным местоположением и размером окон (другими словами, он использует кадр, назначенный по умолчанию в Интерфейсном Разработчике).Как лучше всего обойти это?
Я пытался заставить NSScrollView повторно отображать (используя setNeedsDisplay: и display :), но безуспешно.Кто-нибудь еще сталкивался с подобной проблемой?