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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
#1

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

21.01.2014, 01:11. Просмотров 1034. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток! Мне нужен ваш совет по поводу отрисовки в 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 с PageController - Программирование iOS
Здравствуйте! Может кто подсказать в чем проблема, хочу сделать UIView с PageController(чтобы на одной вьюшке было 7 экранов) Делаю по...

Анимация UIView - Программирование iOS
Есть 3 view, которые лежат друг на друге вот так: |------------------| | 1 | | |-------------| | | | 2 ...

Constraints и размер UIView - Программирование iOS
У меня, допустим, есть UIView добавленная на родительскую View и к ней применены space constraints со всех четырех сторон, то есть она...

Прижать UIView к низу - Программирование iOS
Подскажите как в коде прижать UIView к низу родительской вьюшки?

Рекурсивное создание UIView - Программирование iOS
Здравствуйте! Подскажите как сделать рекурсивное создание 15 UIView, каждая новая view должна располагаться поверх предыдущей. Спасибо!

Программное управление размерами UIView - Objective-C
итак начнем с того, что нам предоставляет ObjC из коробки ; метод мгновенно установит параметры прямоугольника области view ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
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
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 объектов.
Спасибо за совет попробую такой вариант. Посмотрю что получится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2014, 19:33     UIBezierPath vs UIView
Еще ссылки по теме:

Изменить содержимое UIView сдвигом - Программирование iOS
Добрый день. Проблема в следующем: в методе viewDidLoad основного ViewController-а создаётся объект типа myView:UIView //...

Создание UIView внутри UIScrollView программно - Objective-C
Ув. форумчане - нужна помощь. Как работать с интерфейс билдером я разобрался - теперь есть задача сделать интерфейс из кода. Сейчас...

Добавить два UITextView в UIView программно - Swift
Привет! Не могу сообразить как добавить два UITextView в UIView программно что бы эти две текстовые вьюхи расположились равномерно...

Вращение UIView по типу часовой стрелки - Программирование iOS
Всем доброго времени суток, собственно есть задача иммитировать часы, избараздив просторы интернета и IOS Documentation, у меня получилось...

Свой UIView - в каком методе добавить KVO ? - Программирование iOS
Есть CustomView,наследник UIView, с кнопкой и индикатором. В коде другого класса использую этот вью и меняю видимость кнопки. При этом...

Size Classes и свойства frame/bounds у UIView - Программирование iOS
Всем привет! Решил в своем pet-проекте заюзать по-полной size classes, и столкнулся со следующей странностью: Для anyW & anyH...


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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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