Я хочу изменить его цвет, но я не уверен, что подкласс NSScrollView или NSClipView. Или, если угол можно вставить как обычный NSView.Как заполнить правый нижний угол NSScrollView?
мне не нужен код. Просто намек на то, как это сделать.
Я хочу изменить его цвет, но я не уверен, что подкласс NSScrollView или NSClipView. Или, если угол можно вставить как обычный NSView.Как заполнить правый нижний угол NSScrollView?
мне не нужен код. Просто намек на то, как это сделать.
Уже answered elsewhere on stackoverflow от mekentosj. Класс для подкласса - NSScrollView.
@interface MyScrollView : NSScrollView {
}
@end
@implementation MyScrollView
- (void)drawRect:(NSRect)rect{
[super drawRect: rect];
if([self hasVerticalScroller] && [self hasHorizontalScroller]){
NSRect vframe = [[self verticalScroller]frame];
NSRect hframe = [[self horizontalScroller]frame];
NSRect corner;
corner.origin.x = NSMaxX(hframe);
corner.origin.y = NSMinY(hframe);
corner.size.width = NSWidth(vframe);
corner.size.height = NSHeight(hframe);
// your custom drawing in the corner rect here
[[NSColor redColor] set];
NSRectFill(corner);
}
}
@end
Вид странно, но только подклассов NSScrollView и первостепенную вничью с super.drawRect() сделал мой NSScrollView (не) заполнить в углу с белым. Я проверил его 2x, чтобы убедиться, что это не имеет большого смысла.
import Cocoa
class ThemedScrollView: NSScrollView {
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
}
}
Вот Swift вариация оригинального ответа, а также:
import Cocoa
class ThemedScrollView: NSScrollView {
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
if hasVerticalScroller && hasHorizontalScroller {
guard verticalScroller != nil && horizontalScroller != nil else { return }
let vFrame = verticalScroller!.frame
let hFrame = horizontalScroller!.frame
let square = NSRect(origin: CGPoint(x: hFrame.maxX, y: vFrame.maxY), size: CGSize(width: vFrame.width, height: hFrame.height))
let path = NSBezierPath(rect: square)
let fillColor = NSColor.redColor()
fillColor.set()
path.fill()
}
}
}