0

如果用戶觸摸它,則更改UICollectionViewCell的高度。爲了達到這個目的,我使用performBatchUpdates:來更改底層數據並使用標準單元格動畫。這可以完美地工作,並且變化會通過標準的增長和縮小動畫獲得動畫效果。自定義UICollectionViewCell contentView動畫

此外,我使用reloadSection來更新該部分中單元格的所有子視圖。這裏是我的代碼:

[collectionView performBatchUpdates:^{ 
    dataHelper.isCellExpanded = !dataHelper.isCellExpanded; 
} completion:^(BOOL finished) { 
    [collectionView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section]]; 
}]; 

我需要實現擴展單元格狀態子視圖的靈活重新排序。所以我不使用自動佈局。我只更改子視圖框架,並想動畫框架更改以及UICollectionViewCell動畫。

問題是單元格的contentView內部的子視圖在沒有動畫的情況下得到更新,在單元格的高度變化動畫完成後被更新。但我想動畫的細胞子視圖連同高度變化的動畫。如何實現呢?

UPDATE

在我UICollectionViewCell一個自定義動畫的方法是這樣的:

- (void)animate { 
[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveLinear 
        animations:^ 
{ 
    CGRect labelFrame = self.testLabel.frame; 
    labelFrame.origin.y += 70; 
    self.testLabel.frame = labelFrame; 
} 
completion:nil]; 
} 

我創造我UICollectionViewCell子類的initWithFrame:testLabel像這樣:

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     CGRect cellFrame = CGRectMake(0, 0, frame.size.width, frame.size.height); 

     // content 
     _testLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, frame.size.height - 20, frame.size.width - 20, 20)]; 
     _testLabel.backgroundColor = [UIColor redColor]; 
     _testLabel.textColor = [UIColor blackColor]; 
     _testLabel.text = @"test"; 
     [self.contentView addSubview:_testLabel]; 
     .... 

回答

0

你必須在內部實現一個動畫方法集合視圖單元格,並且您需要執行performBatchUpdates方法的那個調用。

[collectionView performBatchUpdates:^{ 
    dataHelper.isCellExpanded = !dataHelper.isCellExpanded; 
    // Access the cells you want to animate 
    yourCustomCell *cell = (yourCustomCell *)[collectionView cellForItemAtIndexPath:indexPath]; 
    [cell animate]; 
} completion:^(BOOL finished) { 
    [collectionView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section]]; 
}]; 

在單元格動畫方法中,您可以實現所有您想要的動畫。

+0

這什麼都不做。我爲我的手機添加了一個'animate'方法。在這個方法裏面我調用了一個標準的'animateWithDuration'。代碼被調用,但沒有動畫。 –

+0

你的動畫實現是怎樣的? – Istvan

+0

我更新了原始問題的來源 –

0

我能夠僅僅通過增加彈簧來解決這個和Struts的contentView並向testLabelUICollectionViewCell子類autoresizingMask

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     CGRect cellFrame = CGRectMake(0, 0, frame.size.width, frame.size.height); 

     self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight; 

     // content 
     _testLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, frame.size.height - 20, frame.size.width - 20, 20)]; 
     _testLabel.backgroundColor = [UIColor redColor]; 
     _testLabel.textColor = [UIColor blackColor]; 
     _testLabel.text = @"You rock"; 
     _testLabel.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 
     [self.contentView addSubview:_testLabel]; 

附註的形式: 我用自動版式玩弄於解決這個問題,但從來沒有能夠得到它的工作。