加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何在NSTextView中均匀地扩展丰富的文本?

发布时间:2020-12-16 05:19:03 所属栏目:百科 来源:网络整理
导读:语境: 我有一个普通的基于文档的Cocoa Mac OS X应用程序,它使用NSTextView进行富文本输入.用户可以在NSTextView中编辑文本的字体,点大小和颜色. 基本SDK:10.7 部署目标:10.6 题: 我想在用户编辑文本时以编程方式(包括NSTextView)实现整个UI的缩放.缩放NS
语境:

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

基本SDK:10.7
部署目标:10.6

题:

我想在用户编辑文本时以编程方式(包括NSTextView)实现整个UI的缩放.缩放NSTextView的框架是没有问题的.但是,我不知道如何在视图中缩放可编辑的文本,该文本可能包含整个文本段落的不同子部分中的多个不同的点大小.

如何将均匀比例因子应用于NSTextView中显示的富文本?

这应该能够很好地与“富文本”一起播放,从而保留用户的字体系列,颜色,特别是点大小(在文本的不同点可能不同),但是均匀/相对地缩放.

是否可以给我的基本SDK和部署目标?是否可能使用较新的Base SDK或Deployment目标?

解决方法

如果意图是缩放视图(而不是实际更改字符串中的属性),我建议使用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%)转换为相对比例请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读