Comment puis-je augmenter la zone de frappe pour UIButton?

J'utilise UIButton avec la layout automatique. Lorsque les images sont petites, la zone de frappe est également petite. Je pourrais imaginer plusieurs approches pour résoudre ce problème:

  1. augmenter la taille de l'image, c'est-à-dire placer une zone transparente autour de l'image. Ce n'est pas bon car lorsque vous positionnez l'image, vous devez garder à l'esprit la bordure transparente supplémentaire.
  2. utilisez CGRectInset et augmentez la taille. Cela ne fonctionne pas bien avec la layout automatique, car en utilisant la layout automatique, elle retombera à la taille de l'image d'origine.

À côté des deux approches ci-dessus, y a-t-il une meilleure solution pour augmenter la surface de prise d'un UIButton?

Vous pouvez simplement ajuster l'encart de contenu du button pour get la taille désirée. Dans le code, cela ressemblera à ceci:

button.contentEdgeInsets = UIEdgeInsets (en haut: 12, à gauche: 16, en bas: 12, à droite: 16)

// ou si vous souhaitez spécifiquement ajuster autour de l'image, utilisez plutôt button.imageEdgeInsets

Dans le constructor de l'interface, cela ressemblera à ceci:

constructeur d'interface

Vous pouvez définir le button EdgeInsets dans le storyboard ou via le code. La taille du button doit être plus grande en hauteur et en largeur que l'image définie sur le button. UIEdgeInseton UIButton

Ou vous pouvez également utiliser l'affichage de l'image avec le geste du robinet pour l'action tout en enregistrant sur l'image. Assurez-vous de cocher l'option Interaction user activée pour l'imageview sur le storyboard pour que le geste fonctionne. Faites en sorte que l'image soit plus grande que l'image et définissez-la sur l'image. Maintenant, définissez le mode de l'image de vue de l'image à centrer sur le storyboard / interface constructor.

Utilisation de la vue d'image avec l'action de robinet et l'image définie dessus comme mode central Vous pouvez appuyer sur l'image pour faire l'action.

J'espère que cela sera utile.

Je ne suis pas sûr, mais il devrait y avoir un moyen de spécifier la taille minimum pour n'importe quel UIView, qui pourrait résoudre votre problème sans travail supplémentaire. Mais honnêtement, l'ajout d'un fond transparent supplémentaire autour de l'image est la meilleure solution.

Vous pouvez append un file de catégorie UIButton (extention) à votre projet, ce qui peut vous aider à créer une zone de frappe plus grande que la zone par défaut.

Très facile. Créez une class UIButton personnalisée. Remplacez ensuite la méthode pointInside … et modifiez la valeur comme vous le souhaitez.

 #import "CustomButton.h" @implementation CustomButton -(BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event { CGRect newArea = CGRectMake(self.bounds.origin.x - 10, self.bounds.origin.y - 10, self.bounds.size.width + 20, self.bounds.size.height + 20); return CGRectContainsPoint(newArea, point); } @end 

Il faudra plus de 10 points zone tactile pour tous les côtés.