Так что это своего рода странный друг, и я не совсем понимаю, что происходит ...Непреднамеренное класс вложенности - код работает 10 слишком часто (Swift)
Так что я сделал несколько пользовательских классы/объекты (UIViews) друг в друга, как это:
class Example1: UIView {
[properties etc.]
let Test = Example2()
Test.frame = CGRe...
addSubview(Test)
}
class Example2: UIView {
[properties etc.]
}
Это все работает отлично, пока вы не добавите какое-то удовольствие к примеру2. Затем он будет запускать все несколько раз (если вы выберете Example1, Example2 = 1, 2, он будет работать в следующем порядке: 1, 1, 2, 2, 1, 2, 1, 2, 2, 2).
Проблема в том, что она создаст несколько версий одного и того же объекта, но с разными значениями, поскольку они вычисляются где-то в другом месте (размер и положение и т. Д.).
Надеюсь, я смог объяснить свою проблему следующим образом: в противном случае это все (довольно грязно, так как я пытался это решить некоторое время): http://pastebin.com/4D3kt1uN (если вы, как вы можете попробовать и запустить его в xcode, чтобы понять, что я имею в виду).
Любая помощь очень ценится!
Проблема в том, что ваш код находится в 'layoutSubviews', который может (и вообще будет) вызываться несколько раз. Каждый раз ваш код создает и добавляет новые подзаголовки (каждый из которых будет получать вызовы 'layoutSubviews'). Вы должны ** создать ** подпункты в инициализаторе для класса; 'layoutSubviews' должен гарантировать, что они находятся в нужном месте. – pbasdf
@pbasdf Это исправляет проблему с запуском несколько раз, но что я должен использовать в качестве инициализатора/конструктора? Я пробовал требуемый init-кодер и фрейм, но тогда он выполнит только первый класс (или none) ... – Mats
Если у вас есть, например, 'let monday = RoosterViewMonday()', то метод '' init() ' (не 'init (frame:)' или 'init (coder:)'). Либо изменить использовать 'let monday = RoosterViewMonday (frame: ....)' или реализовать 'init()'. Аналогично для другого петуха ... просмотров. – pbasdf