iPhone / iPad SDK: домашний экран / сетка в виде фотографий? - PullRequest
1 голос
/ 03 апреля 2010

Я создаю приложение для iPad и хотел бы использовать «плиточный» дисплей с объектами, расположенными в виде прокручиваемой сетки, аналогично домашнему экрану iPhone / iPad и приложению для фотографий iPad.


Чего я пытаюсь достичь:

http://dl.getdropbox.com/u/413086/mzl.nbioluoe.480x480-75.jpg

(ссылка на iTunes)

Есть ли в SDK какой-либо предварительно созданный способ сделать это? Если нет, то как мне создать свое собственное?

Обновление: я думаю, что понимаю, как сделать базовое расположение «объектов» в сетке, но я не знаю, как заставить это работать с тысячами объектов и прокручиваемым представлением без использования тонны памяти и создания все очень медленно (опять же, у меня все еще нет устройства для тестирования).



Обновление 2:

Через полмесяца я наконец нашел идеальное решение: AQGridView

Ответы [ 4 ]

2 голосов
/ 09 апреля 2010

Я бы предложил использовать библиотеку Three20 и адаптировать контроллер представления TTLauncher.

1 голос
/ 10 апреля 2010

Используйте или извлекайте из UIScrollView для представления, которое содержит все плитки. Либо реализуйте метод делегата - (void)scrollViewDidScroll:(UIScrollView *)scrollView;, либо переопределите метод - (void)setContentOffset:(CGPoint)contentOffset. Установите размер содержимого представления прокрутки, как если бы присутствовали все плитки.

Когда прокрутится представление прокрутки, определите, какие плитки будут отображаться на экране. Затем либо используйте схему утилизации, как UITableView с ячейками, либо просто добавьте новые созданные плитки по мере необходимости и удалите те, которые находятся дальше всего от видимой области, когда вы достигли своей квоты памяти. Ваш пример показывает, что плитки размером 2х3 полностью видны, поэтому вам нужно оставить как минимум 4x5 плиток.

Если у вас есть два столбца плиток и горизонтальная прокрутка отсутствует (не видно из рисунка), вы можете просто использовать UITableView напрямую и реализовать пользовательский UITableViewCell, который отображает две плитки.

Если вы наследуете UIScrollView, лучше всего было бы отразить интерфейс, используемый UITableView, с dataSource и делегировать обратные вызовы. Вы бы имели numberOfRows :, numberOfColumns: и tileForRow: column: вместо numberOfRows :, numberOfSections: и cellForIndexPath:, но принципал тот же. Похоже, вы можете использовать плитки фиксированного размера, что значительно упрощает работу.

1 голос
/ 05 апреля 2010

Я не знаю ни одного заранее подготовленного способа сделать это, но обычно есть два подхода, которые вы хотели бы использовать:

1) Если сетка (действительно) не изменится, вы можете просто создать ее прямо в конструкторе интерфейсов.

2) Если вы хотите более гибкий подход, вы можете программно построить сетку в UIViewController, рассчитав соответствующую позицию каждого элемента. Например:

for(int i=0 ; i<num_rows ; i++) {
    for(int j=0 ; j<num_cols ; j++) {
        UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(j*50, i*50, 40, 40)] ;
        [self.view addSubview:myView] ;
        [myView release] ;
    }
}
0 голосов
/ 10 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...