1. ホーム
  2. ios

[解決済み] swift 3 を使って UIView に Shadow を追加する。

2023-08-01 06:16:01

質問

swift 3 より前のバージョンでは、次のように UIView にシャドウを追加していました。

//toolbar is an UIToolbar (UIView)
toolbar.layer.masksToBounds = false
toolbar.layer.shadowOffset = CGSize(width: -1, height: 1)
toolbar.layer.shadowRadius = 1
toolbar.layer.shadowOpacity = 0.5

しかし、上記のコードはSwift 3では動作せず、シャドウの代わりにビュー全体の色が醜いグレーになっています。

swift 3 でシャドウを追加する方法を知っている人はいますか?

どのように解決するのですか?

コード・スニペット。

extension UIView {

  // OUTPUT 1
  func dropShadow(scale: Bool = true) {
    layer.masksToBounds = false
    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOpacity = 0.5
    layer.shadowOffset = CGSize(width: -1, height: 1)
    layer.shadowRadius = 1

    layer.shadowPath = UIBezierPath(rect: bounds).cgPath
    layer.shouldRasterize = true
    layer.rasterizationScale = scale ? UIScreen.main.scale : 1
  }

  // OUTPUT 2
  func dropShadow(color: UIColor, opacity: Float = 0.5, offSet: CGSize, radius: CGFloat = 1, scale: Bool = true) {
    layer.masksToBounds = false
    layer.shadowColor = color.cgColor
    layer.shadowOpacity = opacity
    layer.shadowOffset = offSet
    layer.shadowRadius = radius

    layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
    layer.shouldRasterize = true
    layer.rasterizationScale = scale ? UIScreen.main.scale : 1
  }
}

ノート : もしあなたが を渡さなければ を渡さなかった場合、デフォルトで scale 引数は true になります。関数内の任意のパラメータに対してデフォルト値を定義するには、そのパラメータの型の後に値を代入します。デフォルト値が定義されている場合、関数を呼び出す際にそのパラメータを省略することができます。

OUTPUT 1:

shadowView.dropShadow()

OUTPUT 2:

shadowView.dropShadow(color: .red, opacity: 1, offSet: CGSize(width: -1, height: 1), radius: 3, scale: true)

layer.shouldRasterize = true は、影を静止させ、初期状態の UIView . ですから、私は layer.shouldRasterize = true の中にあるビューのような動的なレイアウトでは UITableViewCell .