У меня есть UIView, который состоит из линий, фигур, текстовых и графических изображений. Этот UIView регулярно обновляется приложением путем повторного рисования всего изображения. Однако, когда я это делаю, текст, строки перемещаются в правильное новое место, а изображения дублируются. Очистка подзаголовков не работает. Кто-нибудь может объяснить, что я делаю неправильно? Пример прилагаемого кода показывает изображение, которое дублируется при каждом касании.core-graphic subviews not cleared
class myMap2: UIView {
var x_value: CGFloat = 100.0
var y_value: CGFloat = 100.0
var text_x = CGFloat(40.0)
var text_y = CGFloat(220.0)
override func drawRect(rect: CGRect) {
for view in self.subviews {
view.removeFromSuperview() // does not execute
print ("removing a subview")
}
self.subviews.forEach({ $0.removeFromSuperview() }) // still not clearing subviews
let draw_context = UIGraphicsGetCurrentContext()
CGContextBeginPath(draw_context)
onDraw(draw_context!)
CGContextStrokePath(draw_context)
UIGraphicsEndImageContext()
let tapRecognizer = UITapGestureRecognizer(target:self, action:"didTap:")
self.addGestureRecognizer(tapRecognizer)
}
func onDraw(ctx: CGContextRef){
let nRect = CGRectMake(text_x , text_y , 250.0, 25.0)
let font1 = UIFont(name: "Courier", size: 8.0)
let nAttr = [
NSFontAttributeName: font1!,
NSForegroundColorAttributeName: UIColor.blackColor()]
let normalLine = "Normal text line. flag at x: \(x_value) y: \(y_value)"
normalLine.drawInRect(nRect, withAttributes:nAttr)
CGContextMoveToPoint(ctx, text_x + 20, text_y + 20)
CGContextAddLineToPoint(ctx, text_x + 40, text_y + 80)
CGContextAddLineToPoint(ctx, text_x + 175, text_y + 120)
let icon_layer = CALayer()
icon_layer.frame = CGRect(x: x_value, y: y_value, width: 40, height: 40)
let image = UIImage(named: "icon_red_flag")!
icon_layer.contents = image.CGImage
layer.addSublayer(icon_layer)
}
func didTap(gesture: UIGestureRecognizer) {
x_value = x_value + 10
y_value = y_value + 10
text_x = text_x + 10
text_y = text_y + 10
self.setNeedsDisplay()
}
}