2017-10-04 26 views
0

Swift 3のプロジェクトをSwift 4にリファクタリングしていて、以前に影が適用されていたボタンに影が描画されないという状況が発生しました。影がUIButtonsに描画されない

私は影を描画するために、このコードを使用しています:

extension UIButton { 
    func drawShadow() { 
    self.layer.drawsAsynchronously = true 
    self.layer.masksToBounds = false 
    self.layer.shadowColor = UIColor.black.cgColor 
    self.layer.shadowOffset = CGSize.zero 
    self.layer.shadowRadius = self.layer.cornerRadius 
    self.layer.shadowOpacity = 0.5  
    } 
} 

私はこのコードを使用してviewDidLayoutSubviewsに影を描画するコードを呼び出す:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    buttonArray = [self.buttonOne, self.buttonTwo, self.buttonThree, self.buttonFour] 
    buttonArray.forEach { button in 
     button.subviews.filter{$0 is UIImageView}.forEach({ imageView in 
     imageView.contentMode = .scaleAspectFit 
     }) 
     button.clipsToBounds = false 
     button.drawShadow() 
    } 
} 

私は、コードをaddding試してみました他の場所でviewDidLayoutSubviewsで私はそれを得ることができるかどうかを確認する。私はviewDidLoadviewWillLayoutSubviewsviewDidAppearなどを試しました。私は、ストーリーボードをやり直して、ボタンをもう一度レイアウトし、派生データをクリーニングし、端末とXcodeの両方からシミュレータを鳴らしてみました。

ボタンはUIStackViewに含まれています。私は、垂直スタックビュー内に埋め込まれた2つのボタンを含む2つの水平スタックビューを持っています。誰かが何か提案がありましたら、それ以外に何をしようか、私はあなたの提案を歓迎します。読んでくれてありがとう。

答えて

1

このコードを試してみてください、私はそれだshadowOffset

func drawShadow() { 
    self.layer.drawsAsynchronously = true 
    self.layer.masksToBounds = false 
    self.layer.shadowColor = UIColor.black.cgColor 
    self.layer.shadowOffset = CGSize(width: 1.0, height: 2.0) 
    self.layer.shadowRadius = self.layer.cornerRadius 
    self.layer.shadowOpacity = 0.5  
    } 
+0

を変更しました!私は 'cornerRadius'も変更しました。ありがとうございました! – Adrian

関連する問題