Я недавно играл с LayoutKit , и хотя фреймворк чистый и достаточно мощный, я изо всех сил пытаюсь найти правильный шаблон для реализации изменяемых компонентов пользовательского интерфейса (например, метки, которая отслеживает прямую трансляцию).Как рассчитывать на комментарий пользователя).Вот два моих вопроса, которые действительно сводятся к одному и тому же фундаментальному принципу - как я могу обновить пользовательский интерфейс, созданный LayoutKit?
Конкретно ...
Сценарий 1:
Каков рекомендуемый способ получить в свои руки UIView
экземпляры, сгенерированные экземпляром Layout
?
В примере "Hello World" , указанном на сайте , скажите, что я хочуизменить изображение, отображаемое UIImage
.Единственный способ сделать это - сохранить ссылку на него из закрытия config
(<<<<< == мои правки): </p>
var myImageView: UIImageView? = nil // <<<<<
let image = SizeLayout<UIImageView>(width: 50, height: 50, config: { imageView in
imageView.image = UIImage(named: "earth.jpg")
myImageView = imageView // <<<<<
})
let label = LabelLayout(text: "Hello World!", alignment: .center)
let stack = StackLayout(
axis: .horizontal,
spacing: 4,
sublayouts: [image, label])
let insets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 8)
let helloWorld = InsetLayout(insets: insets, sublayout: stack)
helloWorld.arrangement().makeViews(in: rootView)
myImageView.image = UIImage(named: "someOtherImage.jpg") // <<<<<
Однако такой подход сопряжен с трудностями.в некоторых сценариях и вообще клунки.Чего мне не хватает?
Сценарий 2:
Скажи, что я хочу изменить ярлык, встроенный глубоко в какой-то макет, с того, чтобы сказать «что-то короткое» на «что-то очень-очень длинное, которое требует пересчетамакет ".
Два подхода к этой проблеме, о которых я могу подумать:
- Воссоздать макет с обновленной информацией и воссоздать все дерево пользовательского интерфейса.Это, однако, похоже на сумасшедшую дорогостоящую операцию только для обновления текста метки.
- Создайте заново макет, используя соответствующие
viewReuseId
s, и пройдите анимацию, но вместо этого немедленно примените изменения:
.
// Apply the initial layout.
before.arrangement(width: 350, height: 250).makeViews(in: rootView)
// Prepare the animation to the final layout.
after.arrangement(width: 350, height: 250).prepareAnimation(for: rootView, direction: .rightToLeft).apply()
Это также выглядит как сумасшедший дорогой способ просто изменить значение метки.Опять же, чего мне не хватает?Можно ли использовать LayoutKit только для неизменных интерфейсов?