#ios #swift #performance #uiview
#iOS #быстрый #Производительность #пользовательский интерфейс
Вопрос:
Я создаю пользовательский UIView и делаю все в draw(_ rect: CGRect)
методе. Также там я хочу добавить новое представление, вызвав self.addSubView
метод, с добавлением ограничений и средств распознавания жестов.
Я думаю о производительности, нормально ли делать все это в draw(_ rect: CGRect)
методе.
Спасибо.
Комментарии:
1. Почему вы создали 3 одинаковых потока? Ошибка или что? 🙂 Удачи с вашим вопросом, хотя
Ответ №1:
можно ли делать все это в
draw(_ rect: CGRect)
методе
Абсолютно нет. Это не имеет ничего общего с производительностью; это связано с тем, что draw
означает. Это означает рисование. Единственное, что вы должны когда-либо делать в draw
, это давать команды рисования, чтобы рисовать в графическом контексте, который был передан для вас.
Другая проблема заключается в том, что draw
может вызываться много-много раз за время существования представления, но добавление ограничений и средств распознавания жестов — это то, что вы хотите сделать только один раз.
Если вы хотите добавить ограничения и средства распознавания жестов, сделайте это в подходящее время, например, когда представление помещается в его супервизор или когда макет вот-вот произойдет.
Комментарии:
1. Я не думаю, что он собирается добавлять распознаватели жестов или другие вещи в
draw
2. @Zich Я думаю, это именно то, что он собирается сделать. Ошибочно.
3. если он собирается добавлять туда нерелевантные коды, я полностью согласен с вами.
4. Спасибо за ваш ответ. Итак, мне нужно перенести добавление средств распознавания жестов в другое место (которое лучше), но создание представления и добавление ограничений — это нормально, верно?
5. Создающих ограничений также не должно быть, проверьте
layoutSubViews
Ответ №2:
Пользовательское рисование в переопределенном draw
методе само по себе не создает проблемы с производительностью. Однако реализация неаккуратного метода рисования приведет к этому.
Если вы добавляете туда просто коды рисования и делаете это с наилучшей возможной практикой. Я считаю, что вы готовы к работе.