使用手势缩放UIlabel文本

时间:2011-10-19 05:58:30

标签: iphone ipad uilabel gesture

我正在使用UIPinchGestureRecognizer缩放UILabel文字。但是我无法实现文本的平滑边缘或平滑度。

enter image description here

缩放代码:

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


  -(void)scale:(id)sender {

        [self 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];
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

问题是您正在使用转换进行扩展。这需要原始渲染并向上或向下缩放,但不会改变它。换句话说:“质量”不会改变,只会以你显示它的大小。您想要的可能是执行以下步骤:

  • 将转换重置为标识(需要为下一步执行此操作)。
  • 计算并应用新的帧大小,重新定位视图。
  • 应用旋转变换。

通过更改帧大小,使用新大小再次绘制视图,这将比放大较小视图产生更好的质量。

我不确定在捏合期间是否可以更改框架(可能会弄乱识别器),也许您需要应用正在进行的转换并执行change-frame-size-method在完成收尾后完成手势以获得高质量版本(有时可以使用滚动视图查看类似的模式)。