Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在从UICollectionView中删除单元格之前,将在项目之后删除动画_Ios_Objective C_Uicollectionview_Core Animation_Nsfetchedresultscontroller - Fatal编程技术网

Ios 在从UICollectionView中删除单元格之前,将在项目之后删除动画

Ios 在从UICollectionView中删除单元格之前,将在项目之后删除动画,ios,objective-c,uicollectionview,core-animation,nsfetchedresultscontroller,Ios,Objective C,Uicollectionview,Core Animation,Nsfetchedresultscontroller,我已经构建了一个集合视图控制器,它可以通过NSFetchResultsController进行更新 当控制器设置为编辑时,我在集合视图中摆动项目单元格,以突出显示用户处于不同的模式,因此当他们点击项目时,应该预期删除行为 问题是当我开始编辑并删除一个项目时,删除的单元格后的所有其他项目都会停止动画 如果你看上面的gif,你会看到我开始编辑,所有的项目都在抖动。当我删除第3项时,该项(4、5、6等)下方的所有项停止抖动,而其上方的所有单元格(0、1)保持抖动。我的猜测是,问题在于苹果公司实施了删

我已经构建了一个集合视图控制器,它可以通过
NSFetchResultsController
进行更新

当控制器设置为编辑时,我在集合视图中摆动项目单元格,以突出显示用户处于不同的模式,因此当他们点击项目时,应该预期删除行为

问题是当我开始编辑并删除一个项目时,删除的单元格后的所有其他项目都会停止动画

如果你看上面的gif,你会看到我开始编辑,所有的项目都在抖动。当我删除第3项时,该项(4、5、6等)下方的所有项停止抖动,而其上方的所有单元格(0、1)保持抖动。我的猜测是,问题在于苹果公司实施了删除动画,删除了所有动画,但我希望不会


可以在SQKFetchedCollectionViewController功能分支中找到所有源。克隆repo后,必须从项目文件夹运行pod安装。打开工作区,您可以在示例目标中找到
sqkcommitscolectionviewcontroller
,然后找到在Pods目标中作为开发pod提供数据的代码

多亏了@ian macdonald,我调查了使用
CAAnimation
而不是
[UIView animateWith
选项

旧方法

使用集合视图的删除动画的新填充方法

- (void)startWiggleing
{
    CAKeyframeAnimation *position = [CAKeyframeAnimation animation];
    position.keyPath = @"position";
    position.values = @[
                        [NSValue valueWithCGPoint:CGPointZero],
                        [NSValue valueWithCGPoint:CGPointMake(-1, 0)],
                        [NSValue valueWithCGPoint:CGPointMake(1, 0)],
                        [NSValue valueWithCGPoint:CGPointMake(-1, 1)],
                        [NSValue valueWithCGPoint:CGPointMake(1, -1)],
                        [NSValue valueWithCGPoint:CGPointZero]
                        ];
    position.timingFunctions = @[
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]
                                 ];
    position.additive = YES;

    CAKeyframeAnimation *rotation = [CAKeyframeAnimation animation];
    rotation.keyPath = @"transform.rotation";
    rotation.values = @[
                        @0,
                        @0.03,
                        @0,
                        [NSNumber numberWithFloat:-0.02]
                        ];
    rotation.timingFunctions = @[
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]
                                 ];

    CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
    group.animations = @[position, rotation];
    group.duration = 0.4;
    group.repeatCount = HUGE_VALF;

    [self.layer addAnimation:group forKey:@"wiggle"];
}

要通读的代码太多了,所以我不打算这么做。不过,我会提供一些建议。您应该研究创建自己的动画关键点,并在其处于活动状态时晃动项目。这样,集合视图将单元格移动到新位置所施加的动画不会取消您的动画。
- (void)startWiggleing
{
    CAKeyframeAnimation *position = [CAKeyframeAnimation animation];
    position.keyPath = @"position";
    position.values = @[
                        [NSValue valueWithCGPoint:CGPointZero],
                        [NSValue valueWithCGPoint:CGPointMake(-1, 0)],
                        [NSValue valueWithCGPoint:CGPointMake(1, 0)],
                        [NSValue valueWithCGPoint:CGPointMake(-1, 1)],
                        [NSValue valueWithCGPoint:CGPointMake(1, -1)],
                        [NSValue valueWithCGPoint:CGPointZero]
                        ];
    position.timingFunctions = @[
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]
                                 ];
    position.additive = YES;

    CAKeyframeAnimation *rotation = [CAKeyframeAnimation animation];
    rotation.keyPath = @"transform.rotation";
    rotation.values = @[
                        @0,
                        @0.03,
                        @0,
                        [NSNumber numberWithFloat:-0.02]
                        ];
    rotation.timingFunctions = @[
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]
                                 ];

    CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
    group.animations = @[position, rotation];
    group.duration = 0.4;
    group.repeatCount = HUGE_VALF;

    [self.layer addAnimation:group forKey:@"wiggle"];
}