Ios 如何在同一UIView中添加阴影和CAShapeLayer
我试图在视图的左下角和右下角添加6px半径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
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)
这在所有的角上都给出了半径,但是,我只希望它在左下角和右下角上-这就是为什么我使用贝塞尔路径。这在所有的角上都给出了半径,但是,我只希望它在左下角和右下角上-这就是为什么我使用贝塞尔路径。