Горизонтальная прокручиваемая таблица iPhone

Мне нужно создать представление на iPhone, которое горизонтально прокручивает галерею изображений. Проблема в том, что эта галерея может содержать от 100 до 1000 изображений, которые необходимо представить, поэтому я хотел бы избежать загрузки их всех сразу в один UIScrollView и снижения производительности. Мне нужно создать представление, которое перерабатывает объекты представления (например, UITableView), чтобы повысить производительность и уменьшить накладные расходы на память, но для этого нужно прокручивать по горизонтали.

Любые идеи? Можно ли сделать работу UITableView горизонтально?

Спасибо!


person devunwired    schedule 23.04.2010    source источник


Ответы (6)


Вы можете использовать большую прокрутку и следить за изменением положения прокрутки. Вы можете добавлять изображения в качестве подвидов по мере того, как они попадают в фактическую видимую область, и удалять их по мере их прокрутки.

Таким образом, у вас должно быть только небольшое количество просмотров изображений в любой момент времени, но вы создаете впечатление, что все они находятся «там».

Вы даже можете переработать просмотры изображений, изменив их изображение и местоположение, чтобы не создавать и не разрушать сложные объекты. Это то, что UITableView делает с ячейками.

person mbmcavoy    schedule 23.04.2010
comment
Спасибо за мысли. Я надеялся, что будет способ использовать механизм утилизации в ОС, и мне не придется управлять всем этим в моем собственном коде ... но я сделаю несколько попыток с этим и посмотрю, как он работает. - person devunwired; 28.04.2010
comment
Есть способ использовать UITableViewController, просмотрите мой ответ ниже - person Christophe Fondacci; 28.10.2014

Это так же просто, как применить преобразование.

Вот код. Запишите это в свой tableViewController init:

self.view.frame = CGRectMake(100,-5,250,350); //any Frame of your choice
CGAffineTransform trans = self.view.transform; // get current transform (i.e. portrait)
trans = CGAffineTransformRotate(trans, (M_PI / -2.0)); // rotate 90 degrees to go landscape
self.view.transform = trans; // set current transform (landscape)

Но теперь вам нужно понять, что ваша ось также поменяна местами. Любые изменения, которые вы вносите в высоту, изменят ширину (и наоборот), а любые изменения, внесенные в origin.x, изменят origin.y (и наоборот)

person Ameer Sheikh    schedule 06.05.2011
comment
Вы хотите, например, не т.е. - Из Википедии: например, это примеры (например, например, ); т.е. это id est (то есть другими словами) - person Thromordyn; 25.05.2011

Я согласен с mbmcavoy, вы также можете посмотреть iPhone / iPad - AppStore, например UIScrollView с разбиением на страницы и предварительным просмотром, в этой статье объясняется, что вам нужно о UIScrollView, а также приводится хороший пример и исходный код.

С Уважением

person fyasar    schedule 27.08.2010

Можно ли добавить UITableView по горизонтали? В другой ориентации, чем экран. Затем вы можете использовать обычную семантику UITableView, где каждая строка представляет собой изображение, которое прокручивается по горизонтали, а не по вертикали.

person David    schedule 26.02.2011

Отправка ответа в эту старую беседу, потому что подтвержденный ответ неверен. Вы можете использовать UITableViewController и его встроенные функции dequeueReusableCellWithIdentifier.

Хитрость заключается в том, чтобы заставить ваше tableview вращаться, а затем заставить вашу ячейку вращаться в противоположном направлении.

в viewDidLoad вы добавите:

self.view.transform = CGAffineTransformMakeRotation(-M_PI_2);

А затем в cellForRowAtIndexPath вы должны использовать:

cell.containerView.transform = CGAffineTransformMakeRotation(M_PI_2);

Убедитесь, что каждое содержимое вашей ячейки добавлено в представление контейнера (в этом примере containerView), так что вам нужно только повернуть контейнер, а не каждое подразделение ячейки.

Также обратите внимание, что он будет лучше работать с ячейками, имеющими квадратные размеры, иначе вы можете столкнуться с трудностями при вычислении высоты / ширины.

person Christophe Fondacci    schedule 28.10.2014

Думаю, у меня есть ответ по поводу прокрутки UITableView по горизонтали:

  1. создать UIScrollView (и отключить вертикальную прокрутку)
  2. поместите UITableView внутри прокрутки
  3. измените ширину представления таблицы по своему усмотрению и обновите UIScrollView.contentSize как ширину представления таблицы
person Pierluigi Mara'    schedule 01.03.2011
comment
Добавление представления таблицы не приводит к его горизонтальной прокрутке независимо от ширины. - person David; 27.08.2015