gpt4 book ai didi

objective-c - 如何在 NSTextView 中统一缩放富文本?

转载 作者:太空狗 更新时间:2023-10-30 03:21:49 24 4
gpt4 key购买 nike

上下文:

我有一个普通的基于文档的 Cocoa Mac OS X 应用程序,它使用 NSTextView 进行富文本输入。用户可以在 NSTextView 中编辑文本的字体系列、磅值和颜色。

基础 SDK:10.7
部署目标:10.6


问题:

我想在用户编辑文本时以编程方式实现整个 UI 的缩放(包括 NSTextView)。缩放 NSTextView 的框架没有问题。但我不知道如何缩放 View 内的可编辑文本,该 View 可能在整个文本运行的不同子部分中包含多个不同的磅值。

如何对 NSTextView 中显示的富文本应用统一的比例因子?

这应该与“富文本”很好地配合使用,这样用户的字体系列、颜色尤其是磅值(在文本运行的不同点可能不同)会被保留,但是统一/相对缩放。

考虑到我的基础 SDK 和部署目标,这可能吗?是否可以使用较新的 Base SDK 或部署目标?

最佳答案

如果目的是缩放 View (而不是实际更改字符串中的属性),我建议使用 scaleUnitSquareToSize: 方法:以及 ScalingScrollView(可用于 TextEdit 示例代码)以获得正确的滚动条行为。

ScalingScrollView 的核心部分是:

- (void)setScaleFactor:(CGFloat)newScaleFactor adjustPopup:(BOOL)flag
{
CGFloat oldScaleFactor = scaleFactor;
if (scaleFactor != newScaleFactor)
{
NSSize curDocFrameSize, newDocBoundsSize;
NSView *clipView = [[self documentView] superview];

scaleFactor = newScaleFactor;

// Get the frame. The frame must stay the same.
curDocFrameSize = [clipView frame].size;

// The new bounds will be frame divided by scale factor
newDocBoundsSize.width = curDocFrameSize.width / scaleFactor;
newDocBoundsSize.height = curDocFrameSize.height / scaleFactor;
}
scaleFactor = newScaleFactor;
[scale_delegate scaleChanged:oldScaleFactor newScale:newScaleFactor];
}

scale_delegate 是您的代表,可以调整您的 NSTextView 对象:

- (void) scaleChanged:(CGFloat)oldScale newScale:(CGFloat)newScale
{
NSInteger percent = lroundf(newScale * 100);

CGFloat scaler = newScale / oldScale;
[textView scaleUnitSquareToSize:NSMakeSize(scaler, scaler)];

NSLayoutManager* lm = [textView layoutManager];
NSTextContainer* tc = [textView textContainer];
[lm ensureLayoutForTextContainer:tc];
}

scaleUnitSquareToSize: 方法相对于其当前状态进行缩放,因此您可以跟踪缩放因子,然后将绝对缩放请求 (200%) 转换为相对缩放请求。

关于objective-c - 如何在 NSTextView 中统一缩放富文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14113179/

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