2016-04-28 8 views
0

私は2つのカスタムクラスを作成しました:CutomViewクラス(UIViewのサブクラス)とCustomButtonクラス(UIButtonのサブクラス)。iOSのCustomViewとCustomButton

class CustomView: UIView { 

    override func drawRect(rect: CGRect) { 
     // Drawing code 
     layer.masksToBounds = true 
     layer.borderWidth = 2.0 
     layer.borderColor = UIColor(colorLiteralRed: 0.0/255, green: 64.0/255, blue: 128.0/255, alpha: 1).CGColor 
     layer.cornerRadius = 10.0 
     let startColor = UIColor(colorLiteralRed: 255.0/255, green: 204.0/255, blue: 1.0, alpha: 1.0).CGColor 
     let endColor = UIColor(colorLiteralRed: 0, green: 128.0/255, blue: 1.0, alpha: 1.0).CGColor 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.frame = CGRect(origin: layer.frame.origin, size: layer.frame.size) 
     gradientLayer.colors = [startColor, endColor]; 
     layer.addSublayer(gradientLayer) 
    } 

@IBDesignable 
class CustomButton: UIButton { 
    override func drawRect(rect: CGRect) { 
     // Drawing code 
     layer.masksToBounds = true 
     layer.borderWidth = 2.0 
     layer.borderColor = UIColor(colorLiteralRed: 0.0/255, green: 64.0/255, blue: 128.0/255, alpha: 1).CGColor 
     layer.cornerRadius = 2.0 
     let startColor = UIColor(colorLiteralRed: 192.0/255, green: 192.0/255, blue: 192.0/255, alpha: 1.0).CGColor 
     let endColor = UIColor(colorLiteralRed: 239.0/255, green: 239.0/255, blue: 239.0/255, alpha: 1.0).CGColor 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.frame = CGRect(origin: layer.frame.origin, size: layer.frame.size) 
     gradientLayer.colors = [startColor, endColor]; 
     layer.addSublayer(gradientLayer) 
    } 

} 

私は、ビューとボタンをデザインするために、これらのカスタムサブクラスを使用しました。私が適用されたカスタムクラスを見るとうまくいきますが、何らかの理由でボタンがシミュレータやiOSデバイスに表示されません。

誰かが私にバグを指摘してもらうことができれば嬉しいです。

Storyboard and Preview shows the purple blue background and button

Simulator only displays purple blue background

+0

layer.addSublayer(gradientLayer)

を変更しますか?コードを更新するか、button.settileメソッドを使用してタイトルを設定しようとしています –

+0

@Shobhakar Tiwari私はストーリーボードを使用してボタンを追加し、ボタンをカスタムボタンとしてクラスを設定しています。 – Roshan

+0

okeyはストーリーボードにボタンが表示されていないので、ストーリーボードでibdesignableプロパティを設定してください –

答えて

0

あなたlayer.addSublayerコールは、層の階層にレイヤを追加します。したがって、グラデーションは最後に描画され、効果的にカスタムボタンにペイントされます。グラデーションを背景にしたいので、最初のレイヤーを描画してください。 uはあなたのコード内のボタンを追加する方法をlayer.insertSublayer(gradientLayer, atIndex: 0)

+0

チャームのように働いた。ありがとうCurmudgeononlybumbly – Roshan

+0

@beyowulf助けてくれてありがとう。 view.frameをself.view.boundsに変更することの提案は、ソリューションの一部でした。 – Roshan

関連する問題