我目前创建了一个图像数组[1-8]。我还创建了一个集合视图,可以将图像从imageArray中拉出来,并将图像放入单元格中的imageview中。请注意,单元格中有一个imageView,它占用整个屏幕,水平滚动和分页都启用了。
现在使用我现有的代码,目前正在发生的事情非常奇怪,所以我会告诉你目前的情况。那么目前正在发生的事情(我正在通过图像1指数为0)如果图像在2(索引1)然后你再次滑动到3(索引2),它会跳过图像3(索引2)和4(索引3)并且位于图像5(索引4)上,所以当我的意思是跳过时,我的意思是它滑过你刚刚刷过的图像并且还有一个。
(奇怪的是它删除了图像1和2)一次是5.我相信这是因为它正在更新索引或将其再次设置为2因为它刚刚删除了0.我知道这可能很难得到但是只需考虑带有分页的scrollview,当你滑动到第三个图像时,它会跳过你的那个和另外一个,并将你滑到图像5的位置。
到目前为止,感谢你们中的一些人,我已经在下面提出了这个代码,但我希望有人能够解决这个可怕的混乱局面。
var currentImage = 0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let x = floor(myCollectionView.contentOffset.x / view.frame.width)
if Int(x) != currentImage {
currentImage = Int(x)
}
if currentImage > 1 {
for collectionCell in myCollectionView.visibleCells as [UICollectionViewCell] {
let visibleCells = myCollectionView.visibleCells
if visibleCells.first != nil {
if let indexPath = myCollectionView.indexPath(for: collectionCell as UICollectionViewCell) {
let indexPathOfLastItem = (indexPath.item) - 1
let indexPathOfItemToDelete = IndexPath(item: (indexPathOfLastItem), section: 0)
imageArray.remove(at: (indexPath.item) - 1)
myCollectionView.deleteItems(at: [indexPathOfItemToDelete])
}
}
}
}
}
答案 0 :(得分:3)
这些代码将使用项目索引删除特定项目。这很棒!
lock.lock/unlock
答案 1 :(得分:0)
使用scrollViewDidEndDragging检测用户何时停止滚动并删除单元格,..
目标C
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
// if decelerating, let scrollViewDidEndDecelerating: handle it
if (decelerate == NO) {
[self deleteCell];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self deleteCell];
}
- (void)deleteCell {
NSIndexPath *pathForCenterCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), CGRectGetMidY(self.tableView.bounds))]; // if you want middle cell
NSIndexPath *firstVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:0]; // if you want first visible cell
NSIndexPath *lastVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:[self.tableView indexPathsForVisibleRows].count]; // last cell in visible cells
myCollectionView.beginUpdates() //if you are performing more than one operation use this
yourImage.removeObjectAtIndex(myNSIndexPath.row)
myCollectionView.deleteItems(at: [lastVisibleIndexPath])
myCollectionView.endUpdates()
}
Swift 3.0
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
// if decelerating, let scrollViewDidEndDecelerating: handle it
if decelerate == false {
deleteCell()
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
deleteCell()
}
func deleteCell() {
var pathForCenterCell: IndexPath? = tableView.indexPathForRow(at: CGPoint(x: CGFloat(tableView.bounds.midX), y: CGFloat(tableView.bounds.midY)))
// if you want middle cell
var firstVisibleIndexPath: IndexPath? = (tableView.indexPathsForVisibleRows?[0] as? IndexPath)
// if you want first visible cell
var lastVisibleIndexPath: IndexPath? = (tableView.indexPathsForVisibleRows?[tableView.indexPathsForVisibleRows?.count] as? IndexPath)
// last cell in visible cells
myCollectionView.beginUpdates()()
//if you are performing more than one operation use this
yourImage.removeObjectAtIndex(myNSIndexPath.row)
myCollectionView.deleteItems
}
快乐编码