旋转 UIButton titleLabel 而不剪裁
Posted
技术标签:
【中文标题】旋转 UIButton titleLabel 而不剪裁【英文标题】:Rotate UIButton titleLabel without clipping 【发布时间】:2014-12-05 04:11:40 【问题描述】:我正在尝试将 UIButton 的 titleLabel 旋转 45 度。文本中的字符是“+”。
我可以让标题旋转
button.titleLabel?.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
然后“+”符号的一端被剪掉,如下图所示。
我找到了this,但我不太明白问题是如何解决的。奇怪的是,被剪裁的部分仍然存在于另一端的范围内——它没有突出到符号的“正方形”之外。
我还尝试使用 Facebook 的 Pop 库,这很有效,但我不知道如何进行正常的逆时针或顺时针旋转。我将kPOPLayerRotation
与M_PI_4
一起使用,它做了一些意想不到的事情。如果有人可以提供基本顺时针/逆时针旋转的示例代码,我很乐意使用 Pop。
一个可能相关的问题:titleLabel 的中心也会移动。有没有简单的方法可以防止这种情况发生?
非常感谢您的帮助。
【问题讨论】:
【参考方案1】:您正在旋转按钮的 titleLabel,它位于按钮内部。按钮未旋转。但标签被旋转了。所以你得到标签的剪辑或中心错位。我建议您旋转按钮本身。所以它也会旋转它的子视图。
// Check already it was rotated,transformed...?
if (CGAffineTransformIsIdentity(button.transform))
//Yes, Reset to the original position and size.
button.transform = CGAffineTransformIdentity;
//Apply rotation now
button.transform=CGAffineTransformMakeRotation(M_PI_4);
【讨论】:
感谢您的帮助。之后,如何重置按钮的框架,以便只有 titleLabel 旋转,而不是整个按钮?我尝试做button.bounds = CGRectMake(...)
,但这并没有解决它。
只需使用 button.transform = CGAffineTransformIdentity;然后设置按钮的框架。
我尝试做类似button.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
然后button.transform = CGAffineTransformIdentity
然后button.frame = CGRectMake(...)
之类的操作,但这没有效果(即整个按钮会旋转,然后旋转回来,但按钮的实际标题会回到它开始的地方——一个普通的“+”)。【参考方案2】:
对于将来会遇到此问题的任何人,我最终创建了一个新的 UIView(蓝色矩形),其中包含 UIButton(白色“+”)。然后我在 UIButton 上禁用了使用过的交互,并向 UIView 添加了一个手势识别器。当我想旋转“+”时,我旋转了整个 UIButton(但不是包含 UIView)。
【讨论】:
以上是关于旋转 UIButton titleLabel 而不剪裁的主要内容,如果未能解决你的问题,请参考以下文章
MvvmCross 绑定到 UIButton.TitleLabel.Text
根据 titleLabel 的长度调整 UIButton 的大小
UIButton:根据titleLabel Text计算UIButton的高度
UIButton set titleLabel setValue(newLabel, forKeyPath: "titleLabel")