技術ブログ

プログラミング、IT関連の記事中心

UIButtonの画像のタップ領域を設定する方法【Swift】

■はじめに

UIButtonに画像を設定した際に、その画像の領域以上にタップ領域を設定したい場合があります。

(画像を小さくするけど、タップはしやすいようにしたい場合など)

その際に、タップ領域を増やす方法を記載します。

■手順

以下のソースでタップ領域が増やせます。(画像名やタップ時のセレクタなどは書き換えてください。)

// 増やしたいタップ領域(マイナスの場合はボタンサイズより外側にタップ領域を増やす)
let tapMargin: CGFloat = 5

let btn = UIButton()
btn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn.imageEdgeInsets = UIEdgeInsets(top: tapMargin, left: tapMargin, bottom: tapMargin, right: tapMargin)
btn.setImage(UIImage(named: "画像名"), for: .normal)
btn.addTarget(vc, action: #selector(タップ処理), for: .touchUpInside)
self.view.addSubview(btn)

上記の「tapMargin」が正の数の場合には、ボタンのサイズの内側にマージンが取られます。

そのため、上記の例だと、画像サイズはWidth:20(30 - tapMargin * 2 ※左右にマージンをとるため、*2), Height:20(30 - tapMargin * 2 ※上下にマージンをとるため、*2)となります。

ちなみに、「tapMargin」が負の数の場合には、ボタンのサイズの外側にマージンが取られます。