Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在同一UIView中添加阴影和CAShapeLayer_Ios_Swift - Fatal编程技术网

Ios 如何在同一UIView中添加阴影和CAShapeLayer

Ios 如何在同一UIView中添加阴影和CAShapeLayer,ios,swift,Ios,Swift,我试图在视图的左下角和右下角添加6px半径innerView,并在整个innerView中添加阴影内部视图包含在名为view2的视图中 我能让它工作的唯一方法是使用以下代码: let containerLayer = CALayer() containerLayer.shadowColor = UIColor.blackColor().CGColor containerLayer.shadowOffset = CGSizeMake(1, 2) containerLayer.shadowOpaci

我试图在视图的左下角和右下角添加6px半径
innerView
,并在整个
innerView
中添加阴影<代码>内部视图包含在名为
view2
的视图中

我能让它工作的唯一方法是使用以下代码:

let containerLayer = CALayer()
containerLayer.shadowColor = UIColor.blackColor().CGColor
containerLayer.shadowOffset = CGSizeMake(1, 2)
containerLayer.shadowOpacity = 0.2
containerLayer.shadowRadius = 2

let maskPath = UIBezierPath(roundedRect: innerView.bounds, byRoundingCorners: UIRectCorner.BottomLeft.union(.BottomRight), cornerRadii: CGSize(width: 6, height: 6)).CGPath

let maskLayer = CAShapeLayer()
maskLayer.path = maskPath
innerView.layer.mask = maskLayer
containerLayer.addSublayer(innerView.layer)
view2.layer.addSublayer(containerLayer)

但是,由于
view2
实际上是
UITableViewCell
的contentView,因此在拖动
containerLayer
时,此代码禁止滚动
UITableView

如果您使用的是自动布局,请删除UIBezierPath。请尝试此代码并为自己定制一个: //此代码用于自定义阴影和角半径为6的视图

let shadowLayer: CALayer = shadowView.layer
        shadowView.clipsToBounds = false
        shadowLayer.shadowColor = 'your color'
        shadowLayer.shadowOffset = CGSizeZero
        shadowLayer.shadowOpacity = 1
        shadowLayer.shadowRadius = 3
        shadowLayer.shouldRasterize = true

        let innerLayer: CALayer = innerView.layer
        innerLayer.cornerRadius = 6
        innerView.clipsToBounds = true
        innerLayer.borderColor = 'your color'.CGColor
        innerLayer.borderWidth = 1

“innerView”位于“shadowView”(在我的xib文件上)内。

如果您使用的是Autolayout,请删除UIBezierPath。请尝试此代码并为自己定制一个: //此代码用于自定义阴影和角半径为6的视图

let shadowLayer: CALayer = shadowView.layer
        shadowView.clipsToBounds = false
        shadowLayer.shadowColor = 'your color'
        shadowLayer.shadowOffset = CGSizeZero
        shadowLayer.shadowOpacity = 1
        shadowLayer.shadowRadius = 3
        shadowLayer.shouldRasterize = true

        let innerLayer: CALayer = innerView.layer
        innerLayer.cornerRadius = 6
        innerView.clipsToBounds = true
        innerLayer.borderColor = 'your color'.CGColor
        innerLayer.borderWidth = 1

“innerView”位于“shadowView”(在我的xib文件上)中。

通过在另一个视图中嵌入
innerView
解决了这个问题。我将阴影应用于新视图,将半径应用于
内部视图

func addShadowTo(shadowView: UIView, andRadiusTo radiusView: UIView) {
     let maskPath = UIBezierPath(roundedRect: radiusView.bounds, byRoundingCorners: UIRectCorner.BottomLeft.union(.BottomRight), cornerRadii: CGSize(width: 6, height: 6)).CGPath
    shadowView.layer.shadowPath = maskPath
    shadowView.layer.shadowColor = UIColor.blackColor().CGColor
    shadowView.layer.shadowOffset = CGSizeMake(1, 2)
    shadowView.layer.shadowOpacity = 0.2
    shadowView.layer.shadowRadius = 2

    let maskLayer = CAShapeLayer()
    maskLayer.path = maskPath
    radiusView.layer.mask = maskLayer
}

通过在另一个视图中嵌入
innerView
解决了这个问题。我将阴影应用于新视图,将半径应用于
内部视图

func addShadowTo(shadowView: UIView, andRadiusTo radiusView: UIView) {
     let maskPath = UIBezierPath(roundedRect: radiusView.bounds, byRoundingCorners: UIRectCorner.BottomLeft.union(.BottomRight), cornerRadii: CGSize(width: 6, height: 6)).CGPath
    shadowView.layer.shadowPath = maskPath
    shadowView.layer.shadowColor = UIColor.blackColor().CGColor
    shadowView.layer.shadowOffset = CGSizeMake(1, 2)
    shadowView.layer.shadowOpacity = 0.2
    shadowView.layer.shadowRadius = 2

    let maskLayer = CAShapeLayer()
    maskLayer.path = maskPath
    radiusView.layer.mask = maskLayer
}

Swift 4:

该代码帮助我在UIVIEW中添加阴影,并使用UIBezierPath添加CornerRadious。将视图的背景色设置为
ClearColor

    yourView.backgroundColor=UIColor.clear 
    let path1 = UIBezierPath(roundedRect:yourView.bounds,
                            byRoundingCorners:[.topRight, .bottomLeft],
                            cornerRadii: CGSize(width: 20, height:  20))

    let maskLayer1 = CAShapeLayer()
    maskLayer1.path = path1.cgPath
    maskLayer1.fillColor = UIColor.white.cgColor
    maskLayer1.shadowColor = UIColor.darkGray.cgColor
    maskLayer1.shadowPath = maskLayer1.path
    maskLayer1.shadowOffset = CGSize(width: 0.0, height: 2.0)
    maskLayer1.shadowOpacity = 0.6
    maskLayer1.shadowRadius = 2
    yourView.layer.insertSublayer(maskLayer1, at: 0)

Swift 4:

该代码帮助我在UIVIEW中添加阴影,并使用UIBezierPath添加CornerRadious。将视图的背景色设置为
ClearColor

    yourView.backgroundColor=UIColor.clear 
    let path1 = UIBezierPath(roundedRect:yourView.bounds,
                            byRoundingCorners:[.topRight, .bottomLeft],
                            cornerRadii: CGSize(width: 20, height:  20))

    let maskLayer1 = CAShapeLayer()
    maskLayer1.path = path1.cgPath
    maskLayer1.fillColor = UIColor.white.cgColor
    maskLayer1.shadowColor = UIColor.darkGray.cgColor
    maskLayer1.shadowPath = maskLayer1.path
    maskLayer1.shadowOffset = CGSize(width: 0.0, height: 2.0)
    maskLayer1.shadowOpacity = 0.6
    maskLayer1.shadowRadius = 2
    yourView.layer.insertSublayer(maskLayer1, at: 0)

这在所有的角上都给出了半径,但是,我只希望它在左下角和右下角上-这就是为什么我使用贝塞尔路径。这在所有的角上都给出了半径,但是,我只希望它在左下角和右下角上-这就是为什么我使用贝塞尔路径。