2016-07-28 1 views
1

То, что я хочу достичь, это галерея, она может содержать до 300 изображений, используя UIScrollView, приведет к не оптимизированному использованию ram/cpu, поскольку он не делает пула (исправьте меня, если я 'm wrong), и у него есть ограничение по ширине, я не могу сделать его в 300 раз больше ширины экрана (верните меня, если я ошибаюсь).Как сделать привязку таблицы к центрам ячеек? (с иллюстрацией анимации gif)

поэтому правильный выбор будет использовать UITableView

1 - как сделать его прокрутки по горизонтали, как в этом GIF?

2 - как сделать это привязкой к центрам ячеек?

gif

EDIT

Я использую это, это дает результат я хочу, но у него есть проблемы, он не имеет терпимости к сколько я должен красть, чтобы перейти к следующей ячейке , я все еще нужна помощь ..

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) 
{ 
    // Find collectionview cell nearest to the center of collectionView 
    // Arbitrarily start with the last cell (as a default) 
    var closestCell : UICollectionViewCell = collectionView.visibleCells()[0]; 
    for cell in collectionView!.visibleCells() as [UICollectionViewCell] 
    { 
     let closestCellDelta = abs(closestCell.center.x - collectionView.bounds.size.width/2.0) 
     let cellDelta = abs(cell.center.x - collectionView.bounds.size.width/2.0) 
     if (cellDelta < closestCellDelta) 
     { 
      closestCell = cell 
     } 
    } 
    let indexPath = collectionView.indexPathForCell(closestCell) 
    collectionView.scrollToItemAtIndexPath(indexPath!, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: true) 
} 

func scrollViewWillBeginDecelerating(scrollView: UIScrollView) 
{ 
    // Find collectionview cell nearest to the center of collectionView 
    // Arbitrarily start with the last cell (as a default) 
    var closestCell : UICollectionViewCell = collectionView.visibleCells()[0]; 
    for cell in collectionView!.visibleCells() as [UICollectionViewCell] 
    { 
     let closestCellDelta = abs(closestCell.center.x - collectionView.bounds.size.width/2.0) 
     let cellDelta = abs(cell.center.x - collectionView.bounds.size.width/2.0) 
     if (cellDelta < closestCellDelta) 
     { 
      closestCell = cell 
     } 
    } 
    let indexPath = collectionView.indexPathForCell(closestCell) 
    collectionView.scrollToItemAtIndexPath(indexPath!, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: true) 
} 

EDIT: -

мне удалось сделать это, не выше трески е.

+0

я думаю, что вы хотите [UIPageViewController] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/) – Fonix

+0

Для горизонтальной прокрутки UITableView, вы должны повернуть UITableView и каждой ячейке. Если вы хотите изменить только одну страницу путем прокрутки, вы можете использовать UIPageViewController. –

ответ

2

Чтобы достичь такого эффекта, вы должны использовать UICollectionView с одной ячейкой или UIPageViewController. Невозможно использовать tableview горизонтально. Как-то вы можете сказать UICollectionView как горизонтальное представление UITableView. UIPageViewcontroller также является хорошим решением. Вы должны прочитать обо всех подробностях, а затем решить, что больше подходит для вас!

и да, это нехорошо использовать прокрутку с одним и тем же разным размером. Это может создать проблему с памятью или производительностью!

Update:

Вы пытались включить подкачку ввиду прокрутки вашей точки зрения коллекции?

посмотреть на скриншоте ниже

enter image description here

Проверьте флажок пейджинговой включить!

затем после Если вы не чувствуете плавный эффект, то вы должны попытаться uncheck adjust scroll view insets под viewcontroller под который вы получили, выбрав чек view controller

скриншот для этого

enter image description here


EDIT человек, который задал вопрос: -

добавив, что это сработало для меня, так как UICollectionView не имеет adjust scroll view insets вариант.

layout.minimumInteritemSpacing = 0 
layout.minimumLineSpacing = 0 

+0

спасибо, я знаю, как использовать UICollectionView, я буду читать о UIPageViewcontroller и посмотреть, что произойдет. – DeyaEldeen

+0

Проверьте мое обновление в ответ !! – Lion

+0

Как снять флажок [настроить прокрутку вставки] программным способом, я могу применить его на self.view, но не в представлении коллекции? – DeyaEldeen

0

вы можете использовать UICollectionView и настроить сбор взгляд сотового

набор collectionViewLayout размер ... Этот размер на основе выше зрения

- (CGSize) CollectionView: (UICollectionView *) CollectionView layout: (UICollectionViewLayout *) collectionViewLayout sizeForItemAtIndexPath: (NSIndexPath *) indexPath { return CGSizeMake (250, 150); }

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