2016-12-20 7 views
1

CATALayerの上にCALayerを描画しようとしています。基本的に、ユーザーがタイルレイヤーをタップすると、私はCALayerでビューを更新したいと思います。ここで CALayerは描画されていない場所を示します

が、それはここでは、0.0で0.0を描いている次の層だストーリーボード

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) 
    } 

にビュー上でのしているCATileLayerのためのクラスだと、それはに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

bounds属性の代わりにframe属性を使用してみましたか? –

答えて

0

境界が0.0,0.0にデフォルト設定されています。そのため、hittestプロパティを使用した方が良い、またはタッチがそのようなケースを処理する機能を開始しました。

関連する問題