2013-02-13 7 views
1

У меня возникли проблемы с получением NSRect границы вида. Я продолжаю получать непризнанную ошибку селектора.Непризнанный селектор - [NSView borderRect]

Вот код:

NSGradient *BorderGradient = [[NSGradient alloc] initWithStartingColor:[NSColor blackColor] endingColor:[NSColor whiteColor]]; 
[BorderGradient drawInRect:[self.window.contentView borderRect] angle:-90]; 
// Unrecognized Selector error here 

Я пытаюсь получить доступ к границе прямоугольника, чтобы добавить цвета градиента к границе. Код также падает, когда я пытаюсь получить доступ к borderRect сам по себе, как это:

NSRect rect = [self.window.contentView borderRect]; 
NSLog(@"origin.x = %f", rect.origin.x); 

И если пытаться преобразовать drawInRect: в CGRect. Например:

NSGradient *BorderGradient = [[NSGradient alloc] initWithStartingColor:[NSColor blackColor] endingColor:[NSColor whiteColor]]; 
[BorderGradient drawInRect:NSRectToCGRect([self.window.contentView borderRect]) angle:-90]; 
// Unrecognized Selector error here 

Любая помощь была бы принята с благодарностью.

Спасибо!

ответ

1

NSView не имеет способа с именем -borderRect. Это пользовательский метод, который вы внедрили? NSBox. Есть -borderRect способ. Ожидаете ли вы, что представление содержимого вашего окна является экземпляром NSBox? Вы проверили, что это действительно так.

Возможно, вы действительно хотите -frame или -bounds?

+0

Хорошо, это очень полезно. Таким образом, это не пользовательский метод, который я реализовал, но он по-прежнему подходит как действительный. Я обнаружил, что просмотр содержимого моего окна не является экземпляром NSBox, но я все еще не хочу -frame или -bounds. Я хочу получить NSRect границы представления и иметь возможность добавить к нему градиент. Есть идеи? –

+0

Вы должны создать собственный подкласс NSView. В вашем подклассе нарисуйте границу с помощью градиента (переопределите '-drawRect:'). Затем сделайте представление содержимого вашего окна экземпляром своего пользовательского подкласса (вы можете установить его в Interface Builder или программно создать окно с помощью '- [NSWindow setContentView:]'). Для чего это необходимо, '-frame' и' -bounds' возвращают NSRect, который на самом деле является прямоугольником, который определяет границу вида. В вашем обычном методе '-drawRect:' вам нужно будет использовать '-bounds', чтобы получить прямоугольник для рисования. –

+0

Отличный совет, который будет работать отлично, но это все равно создаст градиент по всем границам вида. Я по-прежнему ищу способ добавить градиент только по границе (думаю, тонкая, цветная, градиентная граница только по краю представления) представления - не весь вид. Знаете ли вы, как это сделать? –

1

NSView (то, что возвращается из self.window.contentView) не имеет borderRect метод, который вызывает ошибку Нераспознанный Selector.

Возможно, вы захотите вместо этого frame или bounds.

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