我有一个带有 titleLabel
和 backgroundImage
的 UIButton
。我想在按钮处于突出显示状态时调整按钮的大小。此调整大小应该会影响 titleLabel
和 backgroundImage
,但我不想修改按钮的点击区域。
目前我正在这样尝试。它几乎可以工作,但它也会影响点击区域:
- (void)setHighlighted:(BOOL)highlighted
{
if ( highlighted && !self.highlighted )
{
self.transform = CGAffineTransformMakeScale(scaleFactorOnTouch, scaleFactorOnTouch);
}
else if ( !highlighted && self.highlighted )
{
self.transform = CGAffineTransformMakeScale(1.0, 1.0);
}
[super setHighlighted:highlighted];
}
这会导致当您触摸按钮内部并将其拖动到其(扩展 100 像素)点击区域之外时,当您围绕扩展的点击区域边缘拖动时,会出现摆动/颤动。摆动是因为 hitArea 在突出显示和非突出显示状态之间不断变化。
我还尝试修改 self.layer.transform 属性,但这也会导致命中区域发生变化。
如果可能的话,我想避免为突出显示状态设置不同的背景图像。
最佳答案
正如您所观察到的,重写 setHighlighted:
来更改按钮的转换会导致一种恶性循环。所以不要这样做!相反,重写 backgroundRectForBounds:
,如下所示:
- (CGRect)backgroundRectForBounds:(CGRect)bounds {
CGRect result = [super backgroundRectForBounds:bounds];
if (self.highlighted)
result = CGRectInset(result, -3, -3);
return result;
}
这会在突出显示期间放大按钮的绘制尺寸,但放大的绘图仅可见,因为 clipsToBounds
为 NO。边界保持不变,并且您只能在边界内触摸,因此触摸处理不受影响。
这解决了背景图像部分的问题。如果您真的坚持要更改标题大小,我想您将不得不继续更改其转换。不过,我认为,如果这能满足您的目的,那么更改标题的字体(大小)会更具侵入性。
关于objective-c - 如何在不修改其点击矩形的情况下调整 UIButton 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15882473/