gpt4 book ai didi

objective-c - 如何在不修改其点击矩形的情况下调整 UIButton 的大小

转载 作者:行者123 更新时间:2023-12-03 17:40:47 25 4
gpt4 key购买 nike

我有一个带有 titleLabelbackgroundImageUIButton。我想在按钮处于突出显示状态时调整按钮的大小。此调整大小应该会影响 titleLabelbackgroundImage,但我不想修改按钮的点击区域。

目前我正在这样尝试。它几乎可以工作,但它也会影响点击区域:

- (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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com