2016-06-09 2 views
0

Я пытаюсь создать галерею в своем быстром приложении iOS, которое напоминает стиль, что делает Trover, поэтому в основном я хочу иметь массив изображений, указывать максимальное количество изображений, чтобы они соответствовали одна строка, а затем я хочу динамически генерировать UIImageViews с размером кадра, определяемым кодом для создания эффекта коллажа ниже. Я знаю, что это можно сделать в android, используя recyclerView, однако я не уверен, что лучший подход для этого в iOS, я знаю, что я могу использовать TableView, CollectionView или StackView, однако я не уверен, что самый простой подход к этому быть ... то, как я использовал CollectionViews в прошлом, это то, что у них был статический размер для CollectionViewCell, поэтому я не уверен, как их адаптировать для этой цели.Создание галереи стиля Trover iOS Swift

enter image description here

+0

С помощью UICollectionView вы можете использовать собственный макет. Кажется, с вашего снимка экрана (я не использую приложение, простые спекуляции), что есть только 2 типа линий, поэтому вам даже не нужно создавать весь собственный макет. Просто указывая размер элемента, в соответствии с его индексной строкой (здесь я бы сказал, что каждые 4 ячейки, это одинаковый размер), этого должно быть достаточно. – Larme

+0

Вы предлагаете, что позволяет сказать, что блок фотографий - это один 'UICollectionViewCell', и в зависимости от того, как я хочу, чтобы макет был, я динамически создаю imageViews внутри этой ячейки? Так, например, ячейка может иметь 2 'ImageViews' или 4' ImageViews' и т. Д., И я просто произвольно выбираю, какой дизайн мне нужен? – Alk

+0

Я добавил пример кода для UICollectionView (в Objective-C, но логика должна быть одинаковой, и нет ничего действительно сложного, кроме, может быть, «модуля», но все остальное выглядит как Swift. – Larme

ответ

1

От спекуляций на изображении данного, мы можем предположить, что каждые 4 пунктов, расположение и тот же. Таким образом, мы можем использовать UICollectionView и мы могут (Примечание в конце ответа) просто переопределить collectionView:layout:sizeForItemAtIndexPath: с помощью следующего кода в Objective-C, но логика такая же в Swift:

CGFloat wholeWidthAvailable = collectionView.frame.size-interspace; //Since we only show 2 item per line, there is only 1 interspace 
CGFloat height; 

switch (indexPath.row%2) 
{ 
    case 0: 
     height = 100; 
     break; 
    case 1: 
     height = 200; 
     break; 
    default: 
     break; 
} 
CGFloat width; 
switch (indexPath.row%4) 
{ 
    case 0: 
     width = wholeWidthAvailable*2./5.; 
     break; 
    case 1: 
     width = wholeWidthAvailable*3./5.; 
     break; 
    case 2: 
     width = wholeWidthAvailable*3./5.; 
     break; 
    case 3: 
     width = wholeWidthAvailable*2./5.; 
     break; 
    default: 
     break; 
} 
return CGSizeMake(width, height); 

Примечание:
Код не проверен (я написал его здесь, я не знаю, если он скомпилирован как таковой).
Я явно написал два корпуса коммутатора, но он явно может быть использован в одном, поскольку по модулю 2 и по модулю 4 могут быть «соединены».
Я выбрал 2/5 и 3/5, чтобы поместиться в ширину (но вы можете четко указать пропорцию, которая вам понравится).

+0

Если бы я хотел сделать это более сложными и, например, могут быть 4 возможных макета, один с 2 изображениями, 3, 4 и 5 и случайным образом изменяться между ними, было бы проще сделать это в классе collectionViewCell или в методах делегата collectionView, как вы предложили выше – Alk

Смежные вопросы