我构建了一个应用程序,通过Instagram API从Instagram用户那里获取所有照片,并在CollectionView中显示它们。
现在,当用户点击照片时,照片将在UIView
中打开以显示该图片 - 基本上用户可以捏缩放以及其他不在Instagram应用中的选项。
我要做的是 - 滑动图片以移动到下一张图片。 我想过使用ScrollView并不是什么大不了的事。
问题我不知道如何在集合视图中调用下一张照片。
答案 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。 item
与row
相同,但对于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()