UIViewを角丸にしようとしてもdraw(_ rect: CGRect)をオーバーライドしたら四角になる

Xcode 10.1 Swift 4.2

UIViewの角丸は
class MyView: UIView {
 
 init() {
  super.init(frame: .zero)
  self.backgroundColor = UIColor.white
  self.layer.cornerRadius = 10.0
 }
 
 required init?(coder aDecoder: NSCoder) {
  fatalError("init(coder:) has not been implemented")
 }
}
とすると出来る。

しかし次のように
override func draw(_ rect: CGRect)
を書いてしまうとダメになる。
class MyView: UIView {
 
 init() {
  super.init(frame: .zero)
  self.backgroundColor = UIColor.white
  self.layer.cornerRadius = 10.0
 }
 
 required init?(coder aDecoder: NSCoder) {
  fatalError("init(coder:) has not been implemented")
 }

 override func draw(_ rect: CGRect) {
  super.draw(rect)
 }

}
この場合、self.clipsToBounds = trueをinit()などに書いてやると丸く収まる。

しかし、viewにシャドウを付ける場合はself.clipsToBounds = trueによってシャドウが消える。角丸にしてシャドウをつけるのはよくあるので困る。


コメント

このブログの人気の投稿

Swiftのコンパイルエラー寄せ集め

コンパイルエラー覚え書き(Objective-C)

AVAudioSession細かいことまとめ(late 2014)