Как увеличить область видимости (попадания) (пользовательского типа) UIButton без увеличения размера фонового изображения

Можно ли увеличить область видимости UIButton без изменения размера фонового изображения кнопки

Я пробовал:

[shareButton setContentEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)];

&

[shareButton setImageEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)];

но никто из них не работал.

Любое предложение пожалуйста?

Ответ 1

Сделайте UIButton типа buttonWithType:UIButtonTypeCustom и назначьте ему изображение меньшего размера.

Не устанавливайте изображение в качестве фонового изображения или оно будет расти с помощью кнопки. Вместо этого установите его как основное изображение.

Например, если вы хотите установить область подкачки размером 64x64 и вы хотите отобразить размер 32x32: размер кнопки должен быть 64x64, а размер изображения должен быть 32x32.

Программный:

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

// use an image with the desired size (for example 32x32)
[button setImage: [UIImage imageNamed: @"buttonIcon.png"] forState: UIControlStateNormal];
// just set the frame of the button (64x64)
[button setFrame: CGRectMake(xPositionOfMyButton, yPositionOfMyButton, 64, 64)];

Конструктор интерфейсов:

Interface Builder example

Ответ 2

Подкласс супервизора UIButton и переопределить hitTest: withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    CGPoint buttonPoint = [self convertPoint:point toView:_button];
    if ([_button pointInside:buttonPoint withEvent:event]) { // you may add your requirement here
        return _button;
    }
    return [super hitTest:point withEvent:event];
}

Ответ 3

Используйте подход дизайна, который вам нравится (Interface Builder/Visual Format Language) вместе с Autolayout и разметьте UIButton с требуемым размером. Установите заголовок или изображение в качестве содержимого и используйте прозрачное изображение с размером области, которую можно выбрать, в качестве фонового изображения.

_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_button setImage:[UIImage imageNamed:@"contentImage"] forState:UIControlStateNormal];
[_button setBackgroundImage:[UIImage imageNamed:@"transparentImage"] forState:UIControlStateNormal];

Вот пример с _button.layer.borderWidth = 1.

Example