2016-08-13 21 views
1

私は円形の緑色のボタンを作成しました。ここで私は色を定義し、以下のような形ましCircularButton.swiftです:Swift 3.0:一度押すとボタンの色が変わります

import UIKit 

class CircularButton: UIButton { 

@IBInspectable var fillColor: UIColor = UIColor.green 

override func draw(_ rect: CGRect) { 

    let path = UIBezierPath(ovalIn: rect) 
    fillColor.setFill() 
    path.fill() 

    } 
} 

はここでのスクリーンショットです。オンボタン

enter image description here

私は赤にその色を変更したい押します。

@IBAction func circularButtonPressed(_ sender: CircularButton) { 
    sender.fillColor = UIColor.red 
    sender.draw(CGRect(x: 0, y: 0, width: sender.frame.width, 
         height: sender.frame.height)) 
} 

色が赤に変更されていない理由を任意のアイデア:私は以下のように機能を定義しましたか?

:私は、行の下に追加した場合:上記の関数で

sender.backgroundColor = UIColor.white 

、赤色のボタンの色が変化します。

ありがとうございました。

+1

読む[ビューの描画サイクル]について(https://developer.apple.com/ライブラリ/ ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#// apple_ref/doc/uid/TP40009503-CH2-SW10)。 –

+0

正しい方向をありがとう。 – gbdcool

答えて

1

draw(_:)をコードの中から直接呼び出すべきではありません。 コントロールを再描画する必要があることをiOSに伝えるだけで済みます。

draw(_:)を呼び出す行を削除します。

@IBAction func circularButtonPressed(_ sender: CircularButton) { 
    sender.fillColor = UIColor.red 
} 

をそしてfillColorプロパティにオブザーバを追加します。

@IBInspectable var fillColor: UIColor = UIColor.green { 
    didSet(oldColor) { 
     if fillColor != oldColor { 
      self.setNeedsDisplay() 
     } 
    } 
} 
+0

ありがとうございました。これは私が探していたものです。 – gbdcool

関連する問題