缩放UITextView和字体大小更改

时间:2013-10-03 17:24:26

标签: ios objective-c uiview uitextview

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

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

缩放时视图的大小会增加,内部的所有文本也会增加。但是,当我打印UIFont或attributesText属性时:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

因此,为了保持文本大小不变,您必须执行相反的操作:在您的捏合识别器中,重新绘制由缩放系数划分的标称大小DTYIDED的类型中的文本。因此,在22 / 1.25 =(大约)18px fontsize处绘制22px类型 - 当缩放时将接近原始的22px大小。

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