gpt4 book ai didi

ios - UICollectionView 移动单元格在单击单元格后还原

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:24:04 24 4
gpt4 key购买 nike

我有一个带有交互式单元格的 Collection View ,我在单元格上使用长按手势识别器以允许用户重新排列它们。

现在重新排列本身运行良好,我遇到的问题是一旦单元格被重新排列,如果我单击其中一个单元格,它们将恢复到重新排列发生之前的位置。

我感觉这与数据源有关,但我不确定。

这是重新排列单元格的长按手势。

-(IBAction)longPressGestureRecognized:(id)sender {

UILongPressGestureRecognizer *longPress = (UILongPressGestureRecognizer *)sender;
UIGestureRecognizerState state = longPress.state;

CGPoint location = [longPress locationInView:self.collectionView];
NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:location];

static UIView *snapshot = nil;
static NSIndexPath *sourceIndexPath = nil;

switch (state) {
case UIGestureRecognizerStateBegan: {
if (indexPath) {
sourceIndexPath = indexPath;

UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];

snapshot = [self customSnapshotFromView:cell];

CGPoint center = cell.center;
snapshot.center = center;
snapshot.alpha = 0.0;
[self.collectionView addSubview:snapshot];
[UIView animateWithDuration:0.25 animations:^{


snapshot.center = center;
snapshot.transform = CGAffineTransformMakeScale(1.05, 1.05);
snapshot.alpha = 0.98;

cell.hidden = YES;
} completion:nil];
}
break;
}
case UIGestureRecognizerStateChanged: {
CGPoint center = snapshot.center;
center.y = location.y;
snapshot.center = center;

if (indexPath && ![indexPath isEqual:sourceIndexPath]) {
[people2 exchangeObjectAtIndex:indexPath.row withObjectAtIndex:sourceIndexPath.row];
[self.collectionView moveItemAtIndexPath:sourceIndexPath toIndexPath:indexPath];
sourceIndexPath = indexPath;
}
break;
}
default: {
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:sourceIndexPath];
[UIView animateWithDuration:0.25 animations:^{

snapshot.center = cell.center;
snapshot.transform = CGAffineTransformIdentity;
snapshot.alpha = 0.0;
cell.hidden = NO;

} completion:^(BOOL finished){
[snapshot removeFromSuperview];
snapshot = nil;



}];
sourceIndexPath = nil;
break;
}
}

我正在使用 NSNotification 在点击事件时重新加载单元格。

-(void)handleReload:(NSNotification *)notification {
NSLog(@"Notification Recieved");
people2 = [databaseClass getData];
[self.collectionView reloadData];

如有任何帮助,我们将不胜感激。

编辑:[数据库类 getData] 方法 -

+(NSMutableArray*)getData {
[self databaseInit];

peopleArray = [[NSMutableArray alloc] init];

if (sqlite3_open(dbpath, &peopleDB)== SQLITE_OK)
{

NSString *selectSQL = @"SELECT ID, NAME, POINTS, COLOUR FROM PEOPLE";
sqlite3_prepare_v2(peopleDB,[selectSQL UTF8String],-1,&statement,NULL);

while (sqlite3_step(statement)== SQLITE_ROW)
{
PersonObject *newPerson = [[PersonObject alloc]init];
newPerson.ID = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]integerValue];
newPerson.name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
newPerson.points = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)] integerValue];
newPerson.colour = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];
[peopleArray addObject:newPerson];

}

}

sqlite3_finalize(statement);
sqlite3_close(peopleDB);

return peopleArray;

最佳答案

您没有说明您是如何获取数据的,但是这个 [databaseClass getData]; 表明它来自某个数据库表。如果您将数据库重新读入 people2 数组,则数组中数据的顺序将恢复为数据库查询返回的顺序。

关于ios - UICollectionView 移动单元格在单击单元格后还原,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22983042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com