add Shadow on UIView using swift 3

后端 未结 18 1188
攒了一身酷
攒了一身酷 2020-11-30 19:49

prior swift 3 i was adding shadow in my UIView like this :

//toolbar is an UIToolbar (UIView)
toolbar.layer.masksToBounds = false
toolbar.layer.shadowOffset          


        
相关标签:
18条回答
  • 2020-11-30 20:07

    Very simple and few lines of code:

    let viewShadow = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
    viewShadow.center = self.view.center
    viewShadow.backgroundColor = UIColor.yellow
    viewShadow.layer.shadowColor = UIColor.red.cgColor
    viewShadow.layer.shadowOpacity = 1
    viewShadow.layer.shadowOffset = CGSize.zero
    viewShadow.layer.shadowRadius = 5
    self.view.addSubview(viewShadow)
    

    Look like :

    0 讨论(0)
  • 2020-11-30 20:07

    We can apply drop shadow by following way also

        cell.view1.layer.masksToBounds = false
        cell.view1.layer.shadowColor = UIColor.lightGray.cgColor
        cell.view1.backgroundColor = UIColor.white
        cell.view1.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
        cell.view1.layer.shadowOpacity = 0.5
    

    Result will be : http://prntscr.com/nhhv2s

    0 讨论(0)
  • 2020-11-30 20:08

    Although the accepted answer is great and it works as it should, I've modified it to split offSet: CGSize to offsetX: CGFloat and offsetY: CGFloat.

    extension UIView {
      func dropShadow(offsetX: CGFloat, offsetY: CGFloat, color: UIColor, opacity: Float, radius: CGFloat, scale: Bool = true) {
        layer.masksToBounds = false
        layer.shadowOffset = CGSize(width: offsetX, height: offsetY)
        layer.shadowColor = color.cgColor
        layer.shadowOpacity = opacity
        layer.shadowRadius = radius
        layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
        layer.shouldRasterize = true
        layer.rasterizationScale = scale ? UIScreen.main.scale : 1
      }
    }
    
    0 讨论(0)
  • 2020-11-30 20:09

    Swift 4

    toolbar.layer.shadowColor = UIColor.hex(hexColor: "#000000", withAlpha: 1.0).cgColor
    toolbar.layer.shadowOffset = CGSize.zero
    toolbar.layer.shadowRadius = 1
    toolbar.layer.shadowOpacity = 1
    toolbar.layer.shouldRasterize = true
    toolbar.layer.masksToBounds = false
    
    0 讨论(0)
  • 2020-11-30 20:10
        func shadow(Vw : UIView)
        {
            Vw.layer.masksToBounds = false
            Vw.layer.shadowColor =  colorLiteral(red: 0.5058823529, green: 0.5333333333, blue: 0.6117647059, alpha: 1)
            Vw.layer.shadowOffset = CGSize(width: 0, height: 1)
            Vw.layer.shadowRadius = 5.0
            Vw.layer.shadowOpacity = 15.0
            Vw.layer.cornerRadius = 5.0
        }
    
    0 讨论(0)
  • 2020-11-30 20:13

    CODE SNIPPET:

    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
      }
    }
    

    NOTE: If you don't pass any parameter to that function, then the scale argument will be true by default. You can define a default value for any parameter in a function by assigning a value to the parameter after that parameter’s type. If a default value is defined, you can omit that parameter when calling the function.

    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 will make the shadow static and cause a shadow for the initial state of the UIView. So I would recommend not to use layer.shouldRasterize = true in dynamic layouts like view inside a UITableViewCell.

    0 讨论(0)
提交回复
热议问题