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

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

ただいまの
回答率

89.13%

Swift/Xcodeで背景色が透明なボタンを作成したい♥

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,441

chu_xxx_lip

score 108

♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡
目的:

  •   Viewのまとまりを一つのボタンとして扱いたい
  •   汎用的に使えるクラスを作っておきたい

♡★♡゚・*:.。 。.:*・゚♡★♡

まず、UIViewを作成し、その上に、画像を2つ置き、画像と画像の間に、テキストを置き、
一番最後にViewと同じ大きさのUIButtonをかぶせて、全体をボタンとして扱えるようにしたいです。

UIView、UIViewはクラスを作成し、画像に関してはGUIで設定しようと思っています。
完成したら、そのボタンは、画像とテキストを変更して使いまわせるようにしたいです。

やりたいこと↓
ボタンの背景:白
ボタンの高さ:100px
ボタンの幅:300px:
テキストの色:グレー
丸角:3 ※できているはず
ボタンに影を付ける ※できているはず

なのですが設定の方法を教えてくだい。

ここまでできました。

UIViewクラス

import UIKit

@IBDesignable class UCView_Button: UIView {

        @IBInspectable var shadowOffset: CGSize = CGSizeMake(0.0,2.0)
        @IBInspectable var shadowOpacity: Float = 20.0
        @IBInspectable var shadowColor: UIColor = UIColor.blackColor()
        @IBInspectable var shadowRadius: CGFloat = 2.0
        @IBInspectable var bgColor: UIColor = UIColor.whiteColor()

        // Only override drawRect: if you perform custom drawing.
        // An empty implementation adversely affects performance during animation.
        override func drawRect(rect: CGRect) {
            // Drawing code

            // 領域外をマスクで切り取る設定をしない
            self.layer.masksToBounds = false;
            // 影のオフセット
            self.layer.shadowOffset = self.shadowOffset
            // 影の不透明度
            self.layer.shadowOpacity = self.shadowOpacity
            // 影の色
            self.layer.shadowColor = self.shadowColor.CGColor
            // ぼかしの量
            self.layer.shadowRadius = self.shadowRadius
            // ビューの背景に色を設定
            self.layer.backgroundColor = self.bgColor.CGColor

        }
    }

UIButtonクラス

import UIKit

@IBDesignable class UCButton: UIButton {

    @IBInspectable var cornerRadius: CGFloat = 3.0
    @IBOutlet weak var ButtonClear: UIButton!

    override func drawRect(rect: CGRect) {
        self.ButtonClear.alpha=0
        self.layer.cornerRadius = cornerRadius
    }
}

ビルドできますが、途中でこけてしまいます。
self.ButtonClear.alpha=0
の部分に、
Thread 1: EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0)

というエラーが出ています。

よろしくおねがいします٩(๑❛ᴗ❛๑)۶
♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡o。.。o♡

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

@IBOutlet weak var ButtonClear: UIButton!


これはなんでしょうか?
この行を削除して、

self.alpha=0

でOKだと思いますが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/18 14:50

    ふと思ったのですが、ボタンって元々背景は透明じゃないですか?

    キャンセル

  • 2016/02/18 14:56


    @IBDesignable class UCView_Button: UIView {

    @IBInspectable var shadowOffset: CGSize = CGSizeMake(0.0,2.0)
    @IBInspectable var shadowOpacity: Float = 20.0
    @IBInspectable var shadowColor: UIColor = UIColor.blackColor()
    @IBInspectable var shadowRadius: CGFloat = 2.0
    @IBInspectable var bgColor: UIColor = UIColor.whiteColor()

    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func drawRect(rect: CGRect) {
    // Drawing code

    // 領域外をマスクで切り取る設定をしない
    self.layer.masksToBounds = false;
    // 影のオフセット
    self.layer.shadowOffset = self.shadowOffset
    // 影の不透明度
    self.layer.shadowOpacity = self.shadowOpacity
    // 影の色
    self.layer.shadowColor = self.shadowColor.CGColor
    // ぼかしの量
    self.layer.shadowRadius = self.shadowRadius
    // ビューの背景に色を設定
    self.layer.backgroundColor = self.bgColor.CGColor
    }
    }



    この部分に、ミスがありますか?
    新しいページに写真を追加しますが、
    GUIの設定が悪さをしているのでしょうか?

    キャンセル

  • 2016/02/18 15:17

    元々と透明なのですが、こちらもクラスで指定しております。
    質問新しく立てました、ぜひよろしくお願い致します。

    キャンセル

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

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る