在重新加载数据时,在UICollectionViewFlowLayout中将动画设置器设置为nil?

时间:2014-06-21 15:57:18

标签: ios uicollectionview uikit-dynamics

换句话说 - 当关联的集合视图重新加载数据时,您如何知道在UICollectionViewFlowLayout 中?


我正在使用Brandon Alexander的受欢迎且令人敬畏的BPXLFlowLayout

https://github.com/whilethis/UIKit-Dynamics-101/blob/master/Collection%20View%20Dynamics/Collection%20View%20Dynamics/BPXLFlowLayout.m

这是制作“弹性”系列的最佳方式,例如iOS消息应用程序。

How to replicate Messages bouncing bubbles in iOS 7

我在BPXLFlowLayout和其他UICollectionViewFlowLayout方法中发现了一个真正的问题。通常,您只使用一个布局(一个集合视图)“使用它们一次”。假设您有一个集合视图“BouncyViewHouses”

@interface BouncyViewHouses : UICollectionViewController

使用BPXLFlowLayout

在您重新加载之前,一切都很棒。或者让我感到困惑,如果你在另一个集合视图上使用相同的BPXLFlowLayout,你似乎也有同样的问题。

要解决问题,你必须做这样的事情

@implementation BouncyViewHouses

-(void)safelyReloadBouncyTable
    {
    [self.collectionView reloadData];
    [(BPXLFlowLayout *)self.collectionView.collectionViewLayout fastSignal];
    }

每当您重新加载该集合时,您必须“手动”将动画师归零。

所以例如在BPXLFlowLayout中我添加了一个新方法......

@interface BPXLFlowLayout ()
@property (nonatomic, strong) UIDynamicAnimator *animator;
@end

@implementation BPXLFlowLayout

-(void)fastSignal
    {
    // it's very difficult to have prepareLayout (or, anything) called when you
    // reload the collection data. in fact, you must call this manually.
    self.animator = nil;
    }

当我重新加载数据源时,我必须从集合视图中调用它。

(如果你不这样做,你会得到很难找到的毛茸茸的问题!)

我的问题..你认为在BPXLFlowLayout(或类似)中你可以调用self.animator = nil;

-(void)prepareLayout内或可能shouldInvalidateLayoutForBoundsChange:

但它不起作用!我尝试了所有的东西,总之,当在关联的集合视图上重新加载数据源时,我无法弄清楚UICollectionViewFlowLayout中的“触发内容”。

我想这是可能的,NOTHING实际上是在UICollectionViewFlowLayout中触发的..在这种情况下,我的方法是添加一个手动的方法,当你重新加载数据时你必须“调用”,我猜这是唯一的方法。

0 个答案:

没有答案