我正在尝试在 CATileLayer 之上绘制一个 CALayer。基本上,当用户点击图 block 层时,我想用 CALayer 更新 View 。它没有在预期的地方绘制:
这是 CATileLayer 的类,它在 Storyboard 上有一个 View
class SquareView: UIView {
override class var layerClass: AnyClass {
return CATiledLayer.self
}
required init?(coder aDecoder: NSCoder ) {
super.init(coder: aDecoder)
guard let layer = self.layer as? CATiledLayer else { return nil }
layer.contentsScale = 40.0
layer.tileSize = CGSize(width: 40.0, height: 40.0)
}
override func draw(_ rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
let red = CGFloat(drand48())
let green = CGFloat(drand48())
let blue = CGFloat(drand48())
context?.setFillColor(red: red, green: green, blue: blue, alpha: 1.0)
context?.fill(rect)
}
这是在 0.0, 0.0 处绘制的下一层,我不确定为什么它没有覆盖所需的正方形。
override func viewDidLoad() {
super.viewDidLoad()
let theSelector : Selector = #selector(ViewController.tapGesture)
let tapGesture = UITapGestureRecognizer(target: self, action: theSelector)
tapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGesture)
}
func tapGesture(sender: UITapGestureRecognizer) {
let theLayer = CALayer()
let location = sender.location(in: inputView)
let xInView = location.x
let yInView = location.y
let red = CGFloat(drand48())
let green = CGFloat(drand48())
let blue = CGFloat(drand48())
theLayer.backgroundColor = UIColor(red: red, green: green, blue: blue, alpha: 1.0).cgColor
theLayer.bounds = CGRect(x: xInView, y: yInView, width: 40.0, height: 40.0)
view.layer.addSublayer(theLayer)
}
最佳答案
结果边界默认为 0.0, 0.0。因此,最好使用 hittest 属性,或者 touches begind 函数来处理这种情况。
关于ios - CALayer 不在轮廓处绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41237907/