2016-12-20 8 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의 클래스의 그것은 외설 이유는 확실하지 않다 : 예상되는 곳은 그리기 아니에요 원하는 사각형을 덮지 마라.

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 속성을 사용하는 것이 더 좋으며 터치는 이러한 경우를 처리하는 기능을 시작했습니다.