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)
}
bounds 속성 대신 frame 속성을 사용해 보았습니까? –