objective-c - 如何在 cocoa 中画一个圆圈

标签 objective-c cocoa nsview nsbutton

我正在尝试在 NSTableview 的基于 View 的单元格中绘制一个带有背景颜色的圆圈。我尝试了很多选项,但没有一个能正常工作。

我使用了 NSView 子类并在drawRect方法中剪切了圆形路径。它有效,但是每当我滚动表格 View 时,它的形状就不再是圆形的。

CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:dirtyRect xRadius:10.0 yRadius:5.0];
[path addClip];
// Fill in background Color
const CGFloat *components = CGColorGetComponents(backgroundColor.CGColor);
CGContextSetRGBFillColor(context, components[0],components[1],components[2],components[3]);
CGContextFillRect(context, NSRectToCGRect(dirtyRect));
[super drawRect:dirtyRect];

我还尝试使用斜角按钮(圆形),但是当我将背景颜色设置为其单元格时,它不是圆形的。它变成了一个正方形。

    [result.tagImageButton.cell setBackgroundColor:[NSColor redColor]];

最佳答案

使用[selfbounds]而不是dirtyRect。当 ScrollView 滚动时,您的单元格可能会被要求仅绘制其自身的一部分。在这种情况下,dirtyRect 比您的单元格小。在这种情况下,仍然可以绘制整个单元格。

关于objective-c - 如何在 cocoa 中画一个圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23591758/

相关文章:

iphone - 打开并操作 .xcdatamodeld-File/SQLite 的记录?

objective-c - 禁用 NSView mousedown

multithreading - 我可以假设计划在串行队列上运行的 block 将全部在同一线程上运行吗?

Cocoa - NSSearchFieldDelegate 方法未被调用

objective-c - 自定义 NSView 更改背景颜色时崩溃

swift - NSAlert 中的多个 NSTextField - MacOS

objective-c - OSX 上的单调时钟

objective-c - 层支持的 NSControl 仍然调用 NSCell 绘图例程

ios - 屏幕底部的 UIButton 仅间歇性突出显示

ios - CLGeocoder 返回错误 : The operation couldn’t be completed.(kCLErrorDomain 错误 8。)