質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1468閲覧

Swift、iOSアプリ。丸型UIButtonの動作を制御したい。丸型ボタンを設置したい。

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/24 04:43

いつもお世話になっております。iosアプリで丸型ボタンを配置したいと考えています。

下記1枚目のようなボタンで、水色の部分をタップした時のみ反応し、緑の部分は無反応にしたいのですが、どのようにすれば良いでしょうか。今は色をつけていますが、完成形は2枚目のようにして、円部分以外の部分はタップしても動作しないように制御したいのです。コードでもstoryboardでも、どちらでもかまいません。

イメージ説明

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

※もっと簡単な対応方法があったら申し訳ありません。

以下参考サイトの回答の様に、UIButtonのカスタムクラスを作成し、タッチイベントをOverrideしてみるのはいかがでしょうか。以下のようにすることで、四隅のタッチイベントがスルーされるかと思われます。
Active clickable area for UIButton with rounded corners?

・以下、Swift5での例
1、UIButtonのカスタムクラス作成

Swift

1import UIKit 2 3class RoundButton: UIButton { 4 5 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 6 let radius:CGFloat = (self.frame.width / 2) 7 var point:CGPoint = CGPoint() 8 9 if let touch = touches.first { 10 point = touch.location(in: self.superview) 11 } 12 13 let distance:CGFloat = sqrt(CGFloat(powf((Float(self.center.x - point.x)), 2) + powf((Float(self.center.y - point.y)), 2))) 14 15 if(distance < radius) { 16 super.touchesBegan(touches, with: event) 17 } 18 } 19}

2、上記で作成したクラスを、任意のボタンのカスタムクラスに設定
Xcode

投稿2020/05/24 08:34

tsuki01

総合スコア1751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/24 13:01

ありがとうございます!先ほど実行してみたところ、希望通りに動きました。わかりやすいサンプルコードまでありがとうございました!
guest

0

コードなら
view.layer.cornerRadios
をボタンの高さの2分の1に指定すれば丸になります。
↑のviewはサンプルです、実装する際はボタンのViewクラスにしてください

投稿2020/05/24 06:51

popai306

総合スコア157

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/24 07:11

view.layer.cornerRadios を指定して、2枚目のように丸ボタンを作成することはできるのですが、丸ボタンとUIbottonの枠の間、(1枚目の緑の部分)をタップすると、ボタンが反応してします。これを反応しないようにすることは可能でしょうか?見かけだけでなく、機能面も完全に正円のボタンを作りたいと考えております
popai306

2020/05/24 07:16

clipToBoundsはtrueですよね?
退会済みユーザー

退会済みユーザー

2020/05/24 07:39

はい。 button.layer.cornerRadius = 60 button.clipsToBounds = trueとしておりますが、反応があります…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問