将 UIKit Dynamics 添加到 UICollectionViewCells 的正确方法是啥?

Posted

技术标签:

【中文标题】将 UIKit Dynamics 添加到 UICollectionViewCells 的正确方法是啥?【英文标题】:What's the proper way to add UIKit Dynamics to UICollectionViewCells?将 UIKit Dynamics 添加到 UICollectionViewCells 的正确方法是什么? 【发布时间】:2015-12-19 22:24:05 【问题描述】:

我正在尝试使用 UIKit Dynamics 在我的 UICollectionViewCells 上实现滑动删除。不过,事情并没有按计划进行。下面是 UICollectionViewCell 的 awakeFromNib 方法中的代码:

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.contentView];

UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.contentView]];
[collisionBehavior setTranslatesReferenceBoundsIntoBoundaryWithInsets:UIEdgeInsetsMake(0, 0, 0, -20)];
[self.animator addBehavior:collisionBehavior];

self.gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.containerView]];
self.gravityBehavior.gravityDirection = CGVectorMake(0, 0);
[self.animator addBehavior:self.gravityBehavior];

self.pushBehavior = [[UIPushBehavior alloc] initWithItems:@[self.containerView] mode:UIPushBehaviorModeInstantaneous];
self.pushBehavior.magnitude = 0.0f;
self.pushBehavior.angle = 0.0f;
[self.animator addBehavior:self.pushBehavior];

UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[self.containerView]];
itemBehavior.elasticity = 0.45f;
[self.animator addBehavior:itemBehavior];

但这不是很好。这是使用上面的代码在启动时发生的情况:

这种行为似乎主要是由 UICollisionBehavior 生成的。如果我将其注释掉,则所有非红色背景的容器视图都不会设置动画,但会显示为向左偏移几个点。

我是否可以尝试在 UICollectionViewCell 中实现这一点?这样做的正确方法是什么?

谢谢!

【问题讨论】:

【参考方案1】:

没关系。这几乎是一个错字。碰撞行为附加到错误的对象。

正确的代码应该是

UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.containerView]];

[collisionBehavior setTranslatesReferenceBoundsIntoBoundaryWithInsets:UIEdgeInsetsMake(0, 0, 0, -20)];

[self.animator addBehavior:collisionBehavior];

【讨论】:

以上是关于将 UIKit Dynamics 添加到 UICollectionViewCells 的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

UIKit Dynamics 的性能问题

为啥我无法检测到我使用 UIKit Dynamics 推离屏幕的 UIView 何时不再可见?

UIKit Dynamics 用碰撞改变视图框架

CollectionView + UIKit Dynamics 在 performBatchUpdates 上崩溃:

UIKit Dynamics - 从 ChildViewController 引用 UIDynamicAnimator 的问题

UIKit Dynamics 和 UIKit Animation 有啥区别?