gpt4 book ai didi

objective-c - 一种实现横向 NSTextFieldCell 的方法?

转载 作者:行者123 更新时间:2023-12-03 18:04:54 25 4
gpt4 key购买 nike

我的应用程序中有一个 NSTableView,其中的数据在 X 轴和 Y 轴上绘制(即,每一行都与每一列匹配。)我已经按照我想要的方式填充了单元格的数据,但水平延伸的柱子看起来很糟糕。

我想将 NSTextFieldCell 翻转过来,以便文本垂直书写而不是水平书写。我意识到我可能必须对 NSTextFieldCell 进行子类化,但我不确定我需要重写哪些函数才能完成我想做的事情。

NSTextFieldCell 中的哪些函数绘制文本本身?是否有任何内置方法可以垂直而不是水平绘制文本?

最佳答案

好吧,我花了很多功夫才弄清楚这个问题,但我最终遇到了 NSAffineTransform 对象,它显然可以用来相对于应用程序移动整个坐标系。一旦我弄清楚了这一点,我就对 NSTextViewCell 进行子类化并重写 -drawInteriorWithFrame:inView: 函数以在绘制文本之前旋转坐标系。

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
// Save the current graphics state so we can return to it later
NSGraphicsContext *context = [NSGraphicsContext currentContext];
[context saveGraphicsState];

// Create an object that will allow us to shift the origin to the center
NSSize originShift = NSMakeSize(cellFrame.origin.x + cellFrame.size.width / 2.0,
cellFrame.origin.y + cellFrame.size.height / 2.0);

// Rotate the coordinate system
NSAffineTransform* transform = [NSAffineTransform transform];
[transform translateXBy: originShift.width yBy: originShift.height]; // Move origin to center of cell
[transform rotateByDegrees:270]; // Rotate 90 deg CCW
[transform translateXBy: -originShift.width yBy: -originShift.height]; // Move origin back
[transform concat]; // Set the changes to the current NSGraphicsContext

// Create a new frame that matches the cell's position & size in the new coordinate system
NSRect newFrame = NSMakeRect(cellFrame.origin.x-(cellFrame.size.height-cellFrame.size.width)/2,
cellFrame.origin.y+(cellFrame.size.height-cellFrame.size.width)/2,
cellFrame.size.height, cellFrame.size.width);

// Draw the text just like we normally would, but in the new coordinate system
[super drawInteriorWithFrame:newFrame inView:controlView];

// Restore the original coordinate system so that other cells can draw properly
[context restoreGraphicsState];
}

我现在有一个 NSTextCell 可以横向绘制其内容!通过更改行高,我可以给它足够的空间以使其看起来不错。

关于objective-c - 一种实现横向 NSTextFieldCell 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3136302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com