У меня возникли проблемы с получением 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
Любая помощь была бы принята с благодарностью.
Спасибо!
Хорошо, это очень полезно. Таким образом, это не пользовательский метод, который я реализовал, но он по-прежнему подходит как действительный. Я обнаружил, что просмотр содержимого моего окна не является экземпляром NSBox, но я все еще не хочу -frame или -bounds. Я хочу получить NSRect границы представления и иметь возможность добавить к нему градиент. Есть идеи? –
Вы должны создать собственный подкласс NSView. В вашем подклассе нарисуйте границу с помощью градиента (переопределите '-drawRect:'). Затем сделайте представление содержимого вашего окна экземпляром своего пользовательского подкласса (вы можете установить его в Interface Builder или программно создать окно с помощью '- [NSWindow setContentView:]'). Для чего это необходимо, '-frame' и' -bounds' возвращают NSRect, который на самом деле является прямоугольником, который определяет границу вида. В вашем обычном методе '-drawRect:' вам нужно будет использовать '-bounds', чтобы получить прямоугольник для рисования. –
Отличный совет, который будет работать отлично, но это все равно создаст градиент по всем границам вида. Я по-прежнему ищу способ добавить градиент только по границе (думаю, тонкая, цветная, градиентная граница только по краю представления) представления - не весь вид. Знаете ли вы, как это сделать? –