我已经将MaterialView
子类化并覆盖drawRect
来创建自定义视图,然后将其添加为我的tableViewFooter。正如标题所说,我无法深入开展工作。我在不同的图层/视图上使用clipsToBounds
和masksToBounds
搞砸了但没有成功。它是一个UIViewController里面的tableView,只是为了清楚我的代码。
let receiptEdge = ReceiptEdge(frame: CGRect(x: 0, y: 0, width: self.view.w, height: 30))
receiptEdge.backgroundColor = .whiteColor()
receiptEdge.depth = MaterialDepth.Depth5
//What I've tried messing with for an hour
receiptEdge.clipsToBounds = false
receiptEdge.layer.masksToBounds = true
self.tableView.clipsToBounds = false
self.view.clipsToBounds = false
self.view.layer.masksToBounds = true
self.tableView.layer.masksToBounds = true
self.tableView.tableFooterView = receiptEdge
我的子类ReceiptEdge
的代码
override func prepareView() {
super.prepareView()
let rect = self.frame
let path = UIBezierPath()
let receiptEdgeSize = CGFloat(rect.width / 75)
var x = CGFloat(-receiptEdgeSize / 2)
let y = rect.size.height / 2
path.moveToPoint(CGPoint(x: x, y: y))
while x < rect.width {
x += receiptEdgeSize
path.addLineToPoint(CGPoint(x: x, y: y))
x += receiptEdgeSize
path.addArcWithCenter(CGPoint(x: x, y: y), radius: receiptEdgeSize, startAngle: CGFloat(M_PI), endAngle: CGFloat(0), clockwise: true)
x += receiptEdgeSize
}
path.addLineToPoint(CGPoint(x: x, y: CGFloat(0)))
path.addLineToPoint(CGPoint(x: 0, y: 0))
path.addLineToPoint(CGPoint(x: 0, y: y))
let layer = CAShapeLayer()
layer.path = path.CGPath
self.layer.mask = layer
self.visualLayer.mask = layer
self.visualLayer.backgroundColor = UIColor.blueColor().CGColor
self.layer.shadowColor = UIColor.redColor().CGColor
}
屏幕截图显示无深度
提前感谢那些比我更了解图层的人!
以下是一个视图示例,我已使用MaterialTableViewCell
MaterialDepth.Depth2
的子类
这里我没有设置visualLayer
的图层或路径。有阴影但视图或阴影没有剪切到可视层。将shadowColor设置为红色,这样你就可以看到差异。
答案 0 :(得分:0)
深度的运作方式。
MaterialView是一个复合对象,它使用两个图层来实现剪切边界并仍然提供阴影的能力。名为masksToBounds
的CAShapLayer作为子图层添加到视图的背衬层。因此,当添加图像时,它实际上被添加到visualLayer,其layer
属性设置为true,而layer属性的masksToBounds属性设置为false。这允许深度属性显示在receiptEdge.layer.masksToBounds = true
属性上,并且仍然可以提供剪切感。
在这一行
let layer = CAShapeLayer()
layer.path = path.CGPath
self.layer.mask = layer
你实际上正在削减深度。所以我会尝试做的事情是设置这个
{{1}}
到visualLayer属性。
这应该可以帮助你,如果没有让你走上正确的道路。