缩放 UITextView 和字体大小变化 [英] Scaling UITextView And Font Size Change

查看:32
本文介绍了缩放 UITextView 和字体大小变化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我将 UIPinchGestureRecognizer 添加到我的 UITextView 时:

When I add UIPinchGestureRecognizer to my UITextView:

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(didScaleView:)];
[pinchRecognizer setDelegate:self];
[textView addGestureRecognizer:pinchRecognizer];

当放大视图时,视图的大小会增加,并且里面的所有文本也会增加.但是,当我打印 UIFont 或 attributedText 属性时:

the view increases in size when scaling it up and all text inside becomes increased also. However, when I print UIFont or attributedText properties:

NSLog(@"in didScaleView font %@",view.font);

字体大小始终保持不变(例如,22px).这是缩放部分:

the font size remains always the same (for example, 22px). Here is the scaling part:

-(void)didScaleView:(id)sender{

[self.view bringSubviewToFront:[(UIPinchGestureRecognizer*)sender view]];

if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {

    lastScale = 1.0;
    return;
}

CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);

CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);

[[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];

lastScale = [(UIPinchGestureRecognizer*)sender scale];

}

那么,是什么控制了字体大小的变化(即它是如何变化的)以及如何在缩放 UITextView 时保持它不变?

So, what controls the font size change (i.e. how does it change) and how to keep it unchanged when scaling the UITextView?

推荐答案

仿射变换缩放因子像其他任何东西一样应用于文本.所以屏幕上的文字大小应该是标称文字大小乘以比例因子.即,通过捏合到 1.25 比例缩放的 22 像素字体将是 22 * 1.25 = 27.5 像素字体.

The Affine Transform scaling factor is applied to text like anything else. So the onscreen text size should be the nominal textsize times the scaling factor. I.e., a 22px typeface zoomed by pinching to 1.25 scale would be 22 * 1.25 = 27.5px typeface.

因此,要保持文本大小不变,您必须执行相反的操作:在捏合识别器中,以标称大小除以缩放因子的字体大小重新绘制文本.因此,在 22/1.25 =(大约)18px 字体大小处绘制 22px 字体 - 缩放后将接近原始 22px 大小.

Therefore, to keep the text size unchanged, you'd have to do the reverse: In your pinch recognizer, redraw the text in a typesize that is the nominal size DIVIDED by the scaling factor. Hence, draw 22px type at 22/1.25 = (about) 18px fontsize - which when scaled would be close to your original 22px size.

显然四舍五入是一个潜在的问题,您需要确保文本对象的视图实际被重绘.这有帮助吗?

Clearly rounding is a potential issue, and you need to ensure the views of the text objects actually get redrawn. Does this help?

这篇关于缩放 UITextView 和字体大小变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆