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

标签 objective-c cocoa-touch cocoa uibutton

我有一个带有 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/

相关文章:

iphone - 表格 View 中的图像显示在模拟器中,但未显示在我的 iPod 设备中

ios - 无法将包含撇号的用户输入发送到 sqlite3 数据库 (Obj-C)

objective-c - 如何向 iOS 用户发送即时本地通知?

objective-c - 为什么 NSView 的 subview 在 Cocoa 应用程序终止时不发送释放消息?

swift - 打开和保存在非常简单的基于文档的 Swift 4 应用程序中不起作用

objective-c - NSPopover 的 contentViewController 中的动画变化

objective-c - 如何在 Objective-C (cocoa) 中删除二维数组

objective-c - objective-c : calculator app - currentNumber = currentNumber * 10 + digit;

ios - 使用 convertRect 获取 subview 的窗口坐标问题

iphone - 自定义 UIView 和 UIViewController 最佳实践?