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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

920閲覧

[Swift]コードで書いたボタンに角丸、影をつけたい。

sya

総合スコア8

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

1クリップ

投稿2018/06/15 14:25

編集2018/06/15 14:32

前提・実現したいこと

swiftでボタンを、コードで書いています。
ボタンに角を丸くする、影をつけることがどうしても上手くいきません。
ご教授よろしくお願いいたします。
[参考にしたサイト]
ここ
ここ

発生している問題

角が丸くならず影だけがついてしまいます。

該当のソースコード

swift

1    2 let sButtonImage:UIImage = UIImage(named: "xxxxxx")! 3 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 7 let sButton = UIButton(frame: CGRect(x: 0, y: 0, width: 360, height: 200 )) 8 9 sButton.setImage(sButtonImage, for: UIControlState()) 10 sButton.center = CGPoint(x: 375/2, y: 200) 11 sButton.layer.cornerRadius = 10 12 sButton.layer.shadowColor = UIColor.black.cgColor 13 // 透明度 14 sButton.layer.shadowOpacity = 0.5 15 // 距離 16 sButton.layer.shadowOffset = CGSize(width: 5, height: 5) 17 // ぼかし量 18 sButton.layer.shadowRadius = 5 19 20 view.addSubview(sButton) 21 22 } 23 24

補足情報(FW/ツールのバージョンなど)

swit4.0 xcode9.4.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

テキストでタイトルを表示するボタンであれば、
sButton.backgroundColorを設定して
ボタン全体に色をつければ、それが角丸に表示され、
影もつきます。

画像をボタンにする場合、まず先に指摘しておきますが、
sButton.setImage()は、テキストタイトルの
左に表示するアイコン画像の設定なので、ボタン全体に
画像が表示されません。ボタン全体を画像にしたい場合は
sButton.setBackgroundImage()を使って
ボタンの背景画像に設定する必要があります。

ただ、画像を設定した場合は、cornerRadiusを設定した
だけでは角丸にならず、masksToBoundsをtrueにして
角丸ではみ出た画像をカットするよう設定する必要があります。
しかし、こうすると影もカットされてしまうので、うまくいきません。

そこで、画像を角丸にカットした上で影をつけたい場合は、
画像ボタンを角丸にした上で、影表示用のビューを別に作り、
それに画像ボタンを乗せるとうまくいきます。

swift

1 // 影表示用のビュー 2 let shadowView = UIView(frame: CGRect(x: 0, y: 0, width: 360, height: 200 )) 3 shadowView.center = CGPoint(x: 375/2, y: 200) 4 shadowView.layer.shadowColor = UIColor.black.cgColor 5 shadowView.layer.shadowOpacity = 0.5 6 shadowView.layer.shadowOffset = CGSize(width: 5, height: 5) 7 shadowView.layer.shadowRadius = 5 8 9 // 画像ボタン 10 let sButton = UIButton(frame: shadowView.bounds) 11 sButton.setBackgroundImage(sButtonImage, for: []) 12 sButton.layer.cornerRadius = 10 13 sButton.layer.masksToBounds = true 14 15 // 影表示用のビューに画像ボタンを乗せる 16 shadowView.addSubview(sButton) 17 18 // 影表示+画像ボタンのビューを乗せる 19 view.addSubview(shadowView)

投稿2018/06/16 00:09

編集2018/06/16 00:47
TakeOne

総合スコア6299

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

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

sya

2018/06/16 01:48

うまくいくことができました。 ご教授ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問