2017-01-05 2 views
2

У меня есть UIView внутри View Controller, в котором я рисую несколько строк в соответствии с требованиями моего приложения. Через определенный промежуток времени я хочу, чтобы некоторые из этих строк исчезли, а некоторые другие появятся в одном представлении. Подход, который я использую на данный момент, заключается в том, что я очищаю UIView и перерисовывая все строки, которые я хочу нарисовать в обновленном виде.Как очистить и перерисовать содержимое UIView (присутствует в контроллере представления) с быстрым?

Может ли кто-нибудь сказать мне, как правильно это сделать? Я пережил различные вопросы, похожие на звук, но это мало помогло. До сих пор я пытался что-то вроде: -

outletView.setNeedsDisplay() 

и

let context = UIGraphicsGetCurrentContext() 
context?.clear(outletView.frame) 

Ни один из них не кажется, никакой разницы.

Если я позвоню viewDidLoad(), так как все строки обновляются сейчас. Появляются новые линии, но те, которые должны были исчезнуть, не исчезают. Переменные для строк обновляются правильно, так как другая логика, которая проверяет значения переменной линии, работает нормально после того, как обновление должно произойти. Только проблема связана с частью перерисовывания. На самом деле, если я правильно понимаю это, проблема заключается только в очистке старого содержимого uiview. Если очистка происходит правильно, перерисовать с помощью viewDidLoad покажут правильные линии.

P.S. Я знаю, что вызов viewDidLoad() явно не является хорошей практикой. Надеемся найти решение этой проблемы без необходимости сновазывать viewDidLoad.

+0

Я не хотел бы предложить вам позвонить viewDidLoad явно. У вас возникли проблемы с вызовом setNeedsDisplay()? – ubiAle

+0

Да, я согласен, я тоже не хочу использовать viewDidLoad. Используя setNeedsDisplay, он ничего не делает. Точка, в которой я хочу, чтобы линии были переключены, я добавляю этот код: outletView.setNeedsDisplay() , но он не перерисовывает UIView вообще. После прочтения документации Apple (https://developer.apple.com/reference/uikit/uiview/1622437-setneedsdisplay), я понимаю, что она только маркирует прямоугольник границ, который перерисовывается, но на самом деле не перерисовывает себя. Может быть, поэтому я не вижу, что с ним происходит перерисовка? – hellSigma

+0

Предполагаю, что вы переопределяете вид, который хотите нарисовать, drawRect: и правильно выполнить чертеж в этом методе? – ubiAle

ответ

2

Возможно, вы могли бы нарисовать свои линии в разных слоях вида, удалить слой, содержащий строки, которые должны исчезнуть, и создать новый слой для новых линий. Вы можете нарисовать номер layoutSubviews() и использовать self.setNeedsLayout(), если вам нужно обновить представление.

удалить:

guard let sublayers = yourView.layer.sublayers else { return } 
     for layer in sublayers { 
      layer.removeFromSuperlayer() 
     } 

добавить:

let linesPath = UIBezierPath() 
let linesLayer = CAShapeLayer() 
linesPath.move(to: CGPoint(x: 0, y: 0) 
linesPath.addLine(to: CGPoint(x: 50, y: 100) 
lineLayer.path = linesPath.cgPath 
linesLayer.lineWidth = 1.0 
linesLayer.strokeColor = UIColor.black 
yourView.layer.addSublayer(linesLayer) 
+0

Я пошел с вашим предложением и удалил слой, используя removeFromSuperLayer, для моего варианта использования. Большое спасибо за вашу помощь Ocunidee. :) – hellSigma

+0

Было приятно;) – Ocunidee

 Смежные вопросы

  • Нет связанных вопросов^_^