LoginSignup
2
1

More than 5 years have passed since last update.

SketchのShadowsの意味とiOS・Xcodeでのシャドー適用方法

Last updated at Posted at 2018-12-16

SketchのShadowsプロパティの意味

スクリーンショット 2018-12-16 14.36.17.png
iOS開発者が、上の画像のようなSketchのShadowsを実装する際、それぞれが何を意味するか疑問に思う。
それぞれ実際に値を変えて何を意味するか調べる。
スクリーンショット 2018-12-16 14.35.17.png
まずBLurはボカシを意味し値が0の場合、ボカシのない黒塗りとなる。
この時、X = 5なのでX軸方向へ5つ黒塗りとなっている。
スクリーンショット 2018-12-16 14.35.29.png
スクリーンショット 2018-12-16 14.36.09.png
Blurを3にした時も5にした時もY軸方向の値(=5)から2つほど伸びている。5にした時の方が全体的に薄くなる。
スクリーンショット 2018-12-16 14.34.15.png
Y軸方向は、同様にプロパティYで調整する。

iOSでSketchのShadowsを実装してみる

shadowButton.layer.shadowColor = UIColor.black.cgColor
shadowButton.layer.shadowOpacity = 0.9
shadowButton.layer.shadowOffset = CGSize(width: 5.0, height: 0.0)
shadowButton.layer.shadowRadius = 2.0

だいたいshadowOffsetのwidthがSketchのxに、heightがyに相当します。
注意するのがshadowRadiusをSketchのBlurの2分の1にすることです。

Sketchのシャドーを適用するCALayer+Extension

CALayer+Extension.swift
extension CALayer {
  func applySketchShadow(
    color: UIColor = .black,
    alpha: Float = 0.5,
    x: CGFloat = 0,
    y: CGFloat = 2,
    blur: CGFloat = 4,
    spread: CGFloat = 0)
  {
    shadowColor = color.cgColor
    shadowOpacity = alpha
    shadowOffset = CGSize(width: x, height: y)
    shadowRadius = blur / 2.0
    if spread == 0 {
      shadowPath = nil
    } else {
      let dx = -spread
      let rect = bounds.insetBy(dx: dx, dy: dx)
      shadowPath = UIBezierPath(rect: rect).cgPath
    }
  }
}

間違ってたらごめんなさいね

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1