2016-12-20 3 views
1

Я пытаюсь нарисовать CALayer поверх CATileLayer. В принципе, когда пользователь удаляет слой плитки, я хочу обновить представление с помощью CALayer. Это не рисунок, где ожидается:CALayer не рисовать, где указано

Вот класс для CATileLayer, который имеет его над видом на раскадровке

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, и я не знаю, почему это ISN 'покрывая желаемый квадрат.

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

Вы пытались использовать атрибут frame вместо атрибута bounds? –

ответ

0

Выключает границы по умолчанию 0.0, 0.0. Поэтому лучше использовать свойство hittest, или касания, начали функционировать для обработки такого случая.