Форум программистов, компьютерный форум CyberForum.ru

UIBezierPath vs UIView - Программирование iOS/iPhone

Восстановить пароль Регистрация
 
Xavier
in god we trust
 Аватар для Xavier
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.01.2014, 01:11     UIBezierPath vs UIView #1
Всем доброго времени суток! Мне нужен ваш совет по поводу отрисовки в UIVIew.

У меня следующая ситуация:
Есть мой кастомный класс MyView наследник UIView в нем собственно происходят все события.
В этом классе в методе drawRect я отрисовываю сетку (линии сетки представляют из себя тонкие bezierPathWithRect).

Далее мне надо по мере работы моего приложения добавлять кружочки небольшого диаметра, в методе drawRect:
Objective-C
1
UIBezierPath *ovalPath=[UIBezierPath bezierPathWithOvalInRect:rect_];
Количество кружочков со временем работы будет расти до не известного мне количества, может до 10, а может и до 1000.
И у меня возникла проблема в том что по мере добавления кружков мне все их надо отрисовывать т.е. загонять все
UIBezierPath *ovalPath в массив и при вызове drawRect их все рисовать заново, потому что при отрисовке только одного нового кружка все старые удаляются.
Я начал думать, а если у меня будут 1000, а может и 10000 кружков не будет ли это накладно их все заново перерисовывать каждый раз когда создается новый кружок. Я подумывал о setNeedsDisplayInRect, но это тож не вариант т.к. кружки могут пересекаться.

Потом я подумал, а может использовать UIView для кружков и добалять их как subview для главного моего view:
Objective-C
1
2
3
self.circleView = [[UIView alloc] initWithFrame:CGRectMake(x,y,10,10)];
self.circleView.layer.cornerRadius = 5;
[myView addSubview:circleView];
Тогда я выигрываю как мне кажется в том что я разгружаю графическую систему, мне не приходится перерисовывать все кружки каждый раз в drawRect. Но при этом со временем я думаю будет расти использование оперативной памяти, т.к. наверно добавление 1000 subview скушает не мало памяти.

Так вот собственно хочу попросить ваш совет. Как мне лучше поступить? Рисовать 1000 UIbezierPath в drawRect или добавлять 1000 UIview как subview? Что менее затратно для системы и что меньше будет влиять на производительность? Или может существует вообще другое решение для моей ситуации? Может тут вообще все гораздо проще а себе усложнил задачу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 01:11     UIBezierPath vs UIView
Посмотрите здесь:

Программное управление размерами UIView Objective-C
Рекурсивное создание UIView
Анимация UIView
UIView с PageController
Как добавить собственный UIView в нужное место?
Свой UIView - в каком методе добавить KVO ?
Вращение UIView по типу часовой стрелки
Изменить содержимое UIView сдвигом
Прижать UIView к низу
Constraints и размер UIView
Создание UIView внутри UIScrollView программно Objective-C
Size Classes и свойства frame/bounds у UIView

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 575
21.01.2014, 12:17     UIBezierPath vs UIView #2
Количество кружочков со временем работы будет расти до не известного мне количества, может до 10, а может и до 1000.
Cocos2d ?
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
21.01.2014, 12:38     UIBezierPath vs UIView #3
Второй вариант, ИМХО, лучше. Только добавлять надо не subviews, а sublayers (CALayer). Но для точного ответа надо в инструментах смотреть, предварительно добавив 10000 объектов.
Xavier
in god we trust
 Аватар для Xavier
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.01.2014, 15:53  [ТС]     UIBezierPath vs UIView #4
Цитата Сообщение от noname_club Посмотреть сообщение
Cocos2d ?
Как то не думал, это не игра и там помимо рисования кружков будут вестись расчеты и как мне кажется обязательное обновление и перересовка экрана ~60 раз в секунду это лишняя работа (там же это вроде нельзя отключить, могу ошибаться с коксом не знаком детально). Да и в любом случае мне все перерисовывать надо.

Цитата Сообщение от mobidevelop Посмотреть сообщение
Второй вариант, ИМХО, лучше. Только добавлять надо не subviews, а sublayers (CALayer). Но для точного ответа надо в инструментах смотреть, предварительно добавив 10000 объектов.
Спасибо за совет попробую такой вариант. Посмотрю что получится.
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
21.01.2014, 19:33     UIBezierPath vs UIView #5
Цитата Сообщение от Xavier Посмотреть сообщение
Я подумывал о setNeedsDisplayInRect, но это тож не вариант т.к. кружки могут пересекаться.
Можно попробовать и такой вариант. Найти круги, которые попадают в рект не проблема, перерисовывать можно только их.
Yandex
Объявления
21.01.2014, 19:33     UIBezierPath vs UIView
Ответ Создать тему
Опции темы

Текущее время: 08:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru