Как увеличить область видимости (попадания) (пользовательского типа) 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.