根据框架调整视图边界大小

时间:2015-01-05 11:57:43

标签: ios swift uilabel uigesturerecognizer cgaffinetransform

我现在的情况是我正在尝试调整标签大小,我可以使用UIPinchGestureRecognizer来调整大小,但这样做只会调整标签的框架大小。

func handleScale(recognizer: UIPinchGestureRecognizer)
{

    recognizer.view!.transform = CGAffineTransformScale(recognizer.view!.transform,
        recognizer.scale, recognizer.scale)
    recognizer.scale = 1

    recognizer.view!.frame = CGRectMake(recognizer.view!.frame.minX,recognizer.view!.frame.minY, recognizer.view!.frame.width, recognizer.view!.frame.height)  
}   

我希望能够更改标签的边界,以便在新的帧尺寸中再次渲染文本。我曾尝试仅调整比例尺中的标签边界,但无法正常工作。

点击后我创建了一个按钮,根据标签框设置标签边界。虽然它似乎不起作用。

    label.bounds = CGRectMake(0, 0, CGRectGetWidth(self.label.frame), CGRectGetHeight(self.label.frame))

上面的内容是将其大小调整为与框架不同的坐标。

这是按钮操作的打印日志:

Frame Before(-54.2193053279009,279.213449112017,513.438610655802,85.5731017759669)
Bounds Before(0.0,0.0,300.0,50.0)
label.bounds = CGRectMake(0, 0, CGRectGetWidth(self.label.frame), CGRectGetHeight(self.label.frame))
Frame After(-236.8653448536,248.7724425244,878.7306897072,146.4551149512)
Bounds After(0.0,0.0,513.438610655802,85.5731017759669)

它正在做的是一旦设置了界限,它就会改变帧的值。有谁知道如何解决这个问题?

我尝试过设置前一帧值的帧但仍然不起作用。

1 个答案:

答案 0 :(得分:1)

您正在遇到方案described in the documentation for UIView setTransform:

  

警告

     

如果此属性不是identity变换,则frame属性的值是未定义的,因此应该被忽略。

如果您的目标是直观地缩小标签,只需应用变换而不调整框架。

如果您打算缩小标签的几何矩形,同时保持文本大小不变,则可以使用CGRectApplyAffineTransform(CGAffineTransformMakeScale(recognizer.scale, recognizer.scale))生成新框架。如果您发现文字仍未更新,则应尝试在标签上调用setNeedsLayoutsetNeedsDisplay(具体取决于图纸的处理方式)。

相关问题