从其他类调用collectionview中的下一个图像

时间:2016-06-02 17:36:09

标签: ios swift uicollectionview uicollectionviewcell instagram-api

我构建了一个应用程序,通过Instagram API从Instagram用户那里获取所有照片,并在CollectionView中显示它们。

现在,当用户点击照片时,照片将在UIView中打开以显示该图片 - 基本上用户可以捏缩放以及其他不在Instagram应用中的选项。

我要做的是 - 滑动图片以移动到下一张图片。 我想过使用ScrollView并不是什么大不了的事。

问题我不知道如何在集合视图中调用下一张照片。

2 个答案:

答案 0 :(得分:0)

只存储选定的索引路径。下一张照片将是下一张索引路径。

实施例: self.selectedIndexPath = indexPath - 保存

然后获取下一个索引路径或nil(如果不存在):

func nextIndexPath() -> NSIndexPath? {
  if collectionView.numberOfItemsInSection(selectedIndexPath.section) > selectedIndexPath.item {
      return NSIndexPath(forItem: selectedIndexPath.item + 1, inSection: selectedIndexPath.section)
  }
  return nil
}

然后你可以用它来拍下一张照片,如下:

if let indexPath = nextIndexPath() {
  let photo = photos[indexPath.item]
}

P.S。 itemrow相同,但对于CollectionView,因为row的名称错误。因此,最好在集合视图中使用item

答案 1 :(得分:0)

您可以使用这样的委托,当需要集合视图时,让您的视图显示图像调用nextPhoto()。

        struct Photo {
            var image:UIImage?
        }

        class CustomCollectionView: UICollectionViewController{
            var dataSource:[Photo]! = []
            var selectedIndex:NSIndexPath!

            override func viewDidLoad() {
                super.viewDidLoad()
            }
        }

        extension CustomCollectionView: UpdatePhoto {

            func nextPhoto() -> Photo?{
                let nextIndex = selectedIndex.row + 1
                 // update selected index

                selectedIndex = NSIndexPath(forRow: nextIndex, inSection: 0)
                return dataSource[selectedIndex.row];
            }

            func previousPhoto() -> Photo? {
                let previousIndex = selectedIndex.row - 1
                // update selected index
                selectedIndex = NSIndexPath(forRow: previousIndex , inSection: 0)
                return dataSource[selectedIndex.row];
            }
        }

        protocol UpdatePhoto {
            func nextPhoto() -> Photo?
            func previousPhoto() -> Photo?
        }
    class PhotoDisplayingView:UIView{
        var photo:Photo
        var delegate:UpdatePhoto?

        required init(photo:Photo){
            self.photo = photo
            super.init(frame: CGRect(origin: CGPointZero, size: photo.image!.size))
        }

        required init?(coder aDecoder: NSCoder) {
                fatalError("init(coder:) has not been implemented")
            }
        }
     }

处理手势时你会做这样的事情 var nextImage = delegate.nextPhoto()