我有一个带有自定义UICollectionView
的水平UICollectionViewFlowLayout
,该自定义UIAttachmentBehavior
在每个单元格上都设置了UIAttachmentBehavior
,以便在左右滚动时具有弹性。该行为具有以下属性:
attachmentBehavior.length = 1.0f;
attachmentBehavior.damping = 0.5f;
attachmentBehavior.frequency = 1.9f;
将新单元格添加到集合 View 时,它会添加到底部,然后也使用ojit_code动画到其位置。自然地,它会上下弹跳,直到它停在原位。到目前为止,一切都按预期进行。
在新添加的单元格停顿之前向左或向右滚动集合 View 时,我开始出现的问题。向左和向右增加上下左右单元格已被添加的跳动。这导致电池中非常奇怪的圆周运动。
我的问题是,在滚动集合 View 时是否可以停止UIAttachmentBehavior的垂直运动?我尝试了不同的方法,例如使用多种附件行为以及在集合 View 中禁用滚动,直到新添加的单元格停止运行为止,但是没有一种方法可以阻止这种情况。
最佳答案
解决此问题的一种方法是使用附件行为的继承的.action属性。
您将需要首先设置几个变量,例如(从内存,未经测试的代码):
BOOL limitVerticalMovement = TRUE;
CGFloat staticCenterY = CGRectGetHeight(self.collectionView.frame) / 2;
将这些设置为自定义UICollectionViewFlowLayout的属性
创建附件行为时:
UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:item attachedToAnchor:center];
attachment.damping = 1.0f;
attachment.frequency = 1.5f;
attachment.action = ^{
if (!limitVerticalMovement) return;
CGPoint center = item.center;
center.y = staticCenterY;
item.center = center;
};
然后,您可以通过适当设置limitVerticalMovement来打开和关闭限制功能。