我现在的情况是我正在尝试调整标签大小,我可以使用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)
它正在做的是一旦设置了界限,它就会改变帧的值。有谁知道如何解决这个问题?
我尝试过设置前一帧值的帧但仍然不起作用。
答案 0 :(得分:1)
您正在遇到方案described in the documentation for UIView
setTransform:
:
警告
如果此属性不是identity变换,则frame属性的值是未定义的,因此应该被忽略。
如果您的目标是直观地缩小标签,只需应用变换而不调整框架。
如果您打算缩小标签的几何矩形,同时保持文本大小不变,则可以使用CGRectApplyAffineTransform(CGAffineTransformMakeScale(recognizer.scale, recognizer.scale))
生成新框架。如果您发现文字仍未更新,则应尝试在标签上调用setNeedsLayout
或setNeedsDisplay
(具体取决于图纸的处理方式)。