Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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:UICollectionViewCell动画部分更改单元格内容_Ios_Objective C_Animation_Uicollectionview_Uicollectionviewcell - Fatal编程技术网

iOS:UICollectionViewCell动画部分更改单元格内容

iOS:UICollectionViewCell动画部分更改单元格内容,ios,objective-c,animation,uicollectionview,uicollectionviewcell,Ios,Objective C,Animation,Uicollectionview,Uicollectionviewcell,我有一个带单元格的UICollectionView。我需要在UIImageView中更改单元格图像。但我不需要在一个单元格中更改它,而是从一个单元格更改为30,例如。(需要更改值的单元格为“更改”。) 我想用动画制作这个。另外,我不想同时更改所有必须更改的单元格。我想先换一部分,在短时间内换更多,等等,直到一切都会改变。可能吗?这是我如何做到这一点的例子吗 我已经做了一个方法,一下子改变了一切,但这不是我想要的。如果有人想查看这段代码,我会在更新后将其发布到这里,因为现在我看不到发布它的理由(因

我有一个带单元格的UICollectionView。我需要在UIImageView中更改单元格图像。但我不需要在一个单元格中更改它,而是从一个单元格更改为30,例如。(需要更改值的单元格为“更改”。) 我想用动画制作这个。另外,我不想同时更改所有必须更改的单元格。我想先换一部分,在短时间内换更多,等等,直到一切都会改变。可能吗?这是我如何做到这一点的例子吗


我已经做了一个方法,一下子改变了一切,但这不是我想要的。如果有人想查看这段代码,我会在更新后将其发布到这里,因为现在我看不到发布它的理由(因为我认为这是一种完全不同的方式,以显示同时更改和部分更改)。

一点也不难,实际上,这完全取决于您如何加载单元格。例如,我刚刚做了一个简单的黑客:

AnimatedCell.m UICollectionViewCell子类
-(void)setImage:(UIImage*)图像动画带延迟:(NSTimeInterval)延迟
{
self.imageView.image=图像;
//立即应用更改
如果(延迟<0.01)
{
返回;
}
self.imageView.alpha=0.0;
[UIView animateWithDuration:0.5延迟:延迟选项:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionCurveEaseInOut动画:^{
self.imageView.alpha=1.0;
}完成:无];
}
这是一个简单的淡入使用UIView方便的动画方法,你可能需要一些更喜欢以后!无论如何,现在,我们需要设置内容并计算适当的延迟

ViewController.m 符合UICollectionViewDataSource和UICollectionViewDelegate
@界面视图控制器()
@属性(非原子,赋值)CGFloat延迟;
@结束
@实现视图控制器
CGFloat const kDelayMinimum=0.02;
CGFloat const kDelayIncrement=0.01;
-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
{
AnimatedCell*cell=[collectionView dequeueReusableCellWithReuseIdentifier:@“collection.cell”forIndexPath:indexPath];
[cell setImage:[UIImage ImageName:@“photo.png”]animatedWithDelay:self.delay];
自延迟+=kDelayIncrement;
返回单元;
}
-(无效)scrollView将开始刷新:(UIScrollView*)scrollView
{
self.delay=kDelayMinimum;
}
// 
@结束
这真的是一个简单的技巧,我只是增加每个单元格的延迟,然后,当用户滚动时,延迟被重置为最小值,否则,延迟会越来越大,失去控制


<>你需要知道如何正确地将它插入到你的数据源中,处理图像没有被加载的情况等等,但是把这当作工作的基础。

我不认为有任何自动的方法来完成这个任务。您可能需要设置一个NSTimer,并在每次启动时调用一个动画(或一组动画)。我不理解
ScrollViewBeginDraging:
的一小部分。当我们拖动滚动视图时会发生什么?延迟计数器将是最小值,结果会是什么?
- (void)setImage:(UIImage*)image animatedWithDelay:(NSTimeInterval)delay
{
    self.imageView.image = image;
    
    // Apply the change immediately
    if (delay < 0.01)
    {
        return;
    }
    
    self.imageView.alpha = 0.0;
    
    [UIView animateWithDuration:0.5 delay:delay options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionCurveEaseInOut animations:^{
        self.imageView.alpha = 1.0;
    } completion:nil];
}
@interface ViewController () <UICollectionViewDataSource, UICollectionViewDelegate>

@property (nonatomic,assign) CGFloat delay;

@end

@implementation ViewController

CGFloat const kDelayMinimum   = 0.02;
CGFloat const kDelayIncrement = 0.01;

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    AnimatedCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collection.cell" forIndexPath:indexPath];
    
    [cell setImage:[UIImage imageNamed:@"photo.png"] animatedWithDelay:self.delay];
    
    self.delay += kDelayIncrement;
    
    return cell;
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    self.delay = kDelayMinimum;
}

// <Rest of the code>

@end