У меня есть UIView
внутри View Controller
, в котором я рисую несколько строк в соответствии с требованиями моего приложения. Через определенный промежуток времени я хочу, чтобы некоторые из этих строк исчезли, а некоторые другие появятся в одном представлении. Подход, который я использую на данный момент, заключается в том, что я очищаю UIView
и перерисовывая все строки, которые я хочу нарисовать в обновленном виде.Как очистить и перерисовать содержимое UIView (присутствует в контроллере представления) с быстрым?
Может ли кто-нибудь сказать мне, как правильно это сделать? Я пережил различные вопросы, похожие на звук, но это мало помогло. До сих пор я пытался что-то вроде: -
outletView.setNeedsDisplay()
и
let context = UIGraphicsGetCurrentContext()
context?.clear(outletView.frame)
Ни один из них не кажется, никакой разницы.
Если я позвоню viewDidLoad()
, так как все строки обновляются сейчас. Появляются новые линии, но те, которые должны были исчезнуть, не исчезают. Переменные для строк обновляются правильно, так как другая логика, которая проверяет значения переменной линии, работает нормально после того, как обновление должно произойти. Только проблема связана с частью перерисовывания. На самом деле, если я правильно понимаю это, проблема заключается только в очистке старого содержимого uiview. Если очистка происходит правильно, перерисовать с помощью viewDidLoad
покажут правильные линии.
P.S. Я знаю, что вызов viewDidLoad()
явно не является хорошей практикой. Надеемся найти решение этой проблемы без необходимости сновазывать viewDidLoad.
Я не хотел бы предложить вам позвонить viewDidLoad явно. У вас возникли проблемы с вызовом setNeedsDisplay()? – ubiAle
Да, я согласен, я тоже не хочу использовать viewDidLoad. Используя setNeedsDisplay, он ничего не делает. Точка, в которой я хочу, чтобы линии были переключены, я добавляю этот код: outletView.setNeedsDisplay() , но он не перерисовывает UIView вообще. После прочтения документации Apple (https://developer.apple.com/reference/uikit/uiview/1622437-setneedsdisplay), я понимаю, что она только маркирует прямоугольник границ, который перерисовывается, но на самом деле не перерисовывает себя. Может быть, поэтому я не вижу, что с ним происходит перерисовка? – hellSigma
Предполагаю, что вы переопределяете вид, который хотите нарисовать, drawRect: и правильно выполнить чертеж в этом методе? – ubiAle