【问题标题】:Special drop shadow: Swift 2特殊投影:Swift 2
【发布时间】:2017-05-14 07:45:51
【问题描述】:

在下图中,我有两种类型的阴影。

在swift中,我使用了这个功能:

func applyShadow(view: UIView){
    view.layer.shadowColor = UIColor.blackColor().CGColor
    view.layer.shadowOffset = CGSizeMake(0, 1)
    view.layer.shadowOpacity = 0.5
    view.layer.shadowRadius = 10.0
    view.clipsToBounds = false
    view.layer.masksToBounds = false
}

将阴影应用到图像视图中的图像。

如何修改applyShadow函数,让iOS的阴影效果与网页效果相匹配?

我使用的是 .png 文件,但如果我必须转换文件格式,这不会有太多的工作。

【问题讨论】:

    标签: ios swift swift2 png


    【解决方案1】:

    这里只是把view.layer.shadowOffset想象成二维坐标系的第四象限。因此,如果它的值是 CGSizeMake(0, 0),阴影将均匀地分布在所有边上。

    现在 view.layer.shadowRadius 只是阴影的半径或范围。通过改变它的值,阴影长度就会改变。

    view.layer.shadowOpacity 会改变阴影的暗度。它的值从 0 变为 1。

    假设我们将 shadowOffset 设置为 CGSizeMake(5, 0) 并且 shadowRadius 设置为小于 5,那么阴影将移动到对象的右侧并且其他方面不会有任何阴影。假设值为CGSizeMake(0, 5),阴影将在物体的底部,即它会向下移动5个点,其他边不会有任何阴影。因此,如果值为 CGSizeMake(5, 5),那么阴影将向左下方向移动 5 个点。

    我认为您对此有了更好的理解。因此,当回到您的问题时,我认为这会起作用:

    func applyShadow(view: UIView){
        view.layer.shadowColor = UIColor.blackColor().CGColor
        view.layer.shadowOffset = CGSizeMake(8, 12)
        view.layer.shadowOpacity = 0.4
        view.layer.shadowRadius = 5.0
    }
    

    【讨论】:

      【解决方案2】:

      这样的事情应该可以工作:

      func applyShadow(view: UIView){
          let offset = CGSize(width: 150, height: 150)
          let path = UIBezierPath()
          path.move(to: CGPoint(x: 0, y: 0))
          path.addLine(to: CGPoint(x: view.frame.size.width, y: 0))
          path.addLine(to: CGPoint(x: view.frame.size.width + offset.width, y: view.frame.size.height))
          path.addLine(to: CGPoint(x: view.frame.size.width + offset.width, y: view.frame.size.height + offset.height))
          path.addLine(to: CGPoint(x: view.frame.size.width, y: view.frame.size.height + offset.height))
          path.addLine(to: CGPoint(x: 0, y: view.frame.size.height))
          path.addLine(to: CGPoint(x: 0, y: 0))
      
          view.layer.shadowColor = UIColor.black.cgColor
          view.layer.shadowPath = path.cgPath
          view.layer.shadowOpacity = 0.2
          view.layer.shadowRadius = 2.0
          view.layer.masksToBounds = false
      }
      

      您可能需要多摆弄offsetshadowOpacityshadowRadius 才能尽可能接近,但是当我在本地调试时这些值非常接近。

      另外,您不需要同时执行view.clipsToBoundsview.layer.masksToBounds。这些几乎可以互换,如果您设置一个,另一个应该会自动更新。

      【讨论】:

        猜你喜欢
        • 2017-12-07
        • 2014-11-27
        • 2021-01-23
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        相关资源
        最近更新 更多