Não há nada errado com as respostas apresentadas; no entanto, eu queria estender a resposta de jlarjlar, pois possui um potencial incrível que pode agregar valor ao mesmo problema com outros controles (por exemplo, SearchBar). Isso ocorre porque, como pointInside está anexado a um UIView, é possível subclassificar qualquer controle para melhorar a área de toque. Esta resposta também mostra uma amostra completa de como implementar a solução completa.
Crie uma nova subclasse para o seu botão (ou qualquer controle)
#import <UIKit/UIKit.h>
@interface MNGButton : UIButton
@end
Em seguida, substitua o método pointInside em sua implementação de subclasse
@implementation MNGButton
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
//increase touch area for control in all directions by 20
CGFloat margin = 20.0;
CGRect area = CGRectInset(self.bounds, -margin, -margin);
return CGRectContainsPoint(area, point);
}
@end
No seu arquivo storyboard / xib, selecione o controle em questão e abra o inspetor de identidade e digite o nome da sua classe personalizada.
Na sua classe UIViewController para a cena que contém o botão, altere o tipo de classe do botão para o nome da sua subclasse.
@property (weak, nonatomic) IBOutlet MNGButton *helpButton;
Vincule seu botão storyboard / xib à propriedade IBOutlet e sua área de toque será expandida para caber na área definida na subclasse.
Além de substituir o método pointInside em conjunto com os CGRectInset e CGRectContainsPoint métodos, um deve ter tempo para examinar o CGGeometry para alargar a área de toque rectangular de qualquer subclasse UIView. Você também pode encontrar algumas dicas interessantes sobre casos de uso da CGGeometry no NSHipster .
Por exemplo, pode-se tornar a área de toque irregular usando os métodos mencionados acima ou simplesmente optar por aumentar a área de toque duas vezes maior que a área de toque horizontal:
CGRect area = CGRectInset(self.bounds, -(2*margin), -margin);
NB: Substituir qualquer controle de classe de interface do usuário deve produzir resultados semelhantes ao estender a área de toque para diferentes controles (ou qualquer subclasse UIView, como UIImageView, etc.).