【问题标题】:Scaling UITextView And Font Size Change缩放 UITextView 和字体大小更改
【发布时间】:2013-10-03 17:24:25
【问题描述】:

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

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

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

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

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

-(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 时如何保持不变?

【问题讨论】:

  • 包含 UIPinchGestureRecognizer 的操作方法中的代码可能会有所帮助。
  • 我刚刚在上面添加了代码。

标签: ios objective-c uiview uitextview


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 2011-09-24
    • 2012-07-20
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    相关资源
    最近更新 更多