我正在尝试使用此代码制作网格视图动画,但我没有使用此代码获取网格视图动画。你能帮我怎么做吗?

Posted

技术标签:

【中文标题】我正在尝试使用此代码制作网格视图动画,但我没有使用此代码获取网格视图动画。你能帮我怎么做吗?【英文标题】:i'm trying to do grid view animation with this code,but i'm not getting grid view animation with this code.can you help me how? 【发布时间】:2014-08-30 06:41:55 【问题描述】:

我遇到了这个应用程序的问题,我正在使用 tableview 做一个动画应用程序。当我滚动图像时,所有应用程序都可以正常工作,但是当我打开应用程序时,图像没有翻转,请帮助我这是我的第一个应用程序? 当我滚动图像翻转但我需要在不执行任何操作(如滚动/拖动/触摸屏幕)的情况下翻转图像。 我需要在模拟器上直接显示图像翻转我什么时候运行代码,但我没有得到准确的结果

这是我要在 .h 文件中执行的代码 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath CATransform3D 旋转 = CATransform3DMakeRotation( (90.0*M_PI)/180, .0, 0.5, 0.5); cell.contentView.layer.transform = 旋转;

    CGFloat rotationAngleDegrees = 360;
    CGFloat rotationAngleRadians = rotationAngleDegrees * (M_PI/360);
    //CGPoint offsetPositioning = CGPointMake(200, 20);
    CATransform3D transform = CATransform3DIdentity;
    transform = CATransform3DRotate(transform, rotationAngleRadians, 0.0, 1.0, 0.0);
   // transform = CATransform3DTranslate(transform, offsetPositioning.x, offsetPositioning.y, 0.0);

    UIView *card = [cell contentView];
    card.layer.transform = transform;
    card.layer.opacity = 0.8;

    [UIView animateWithDuration:1.0 animations:^card.layer.transform = CATransform3DIdentity;
        card.layer.opacity = 1;];


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    // Return the number of sections.
    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    // Return the number of rows in the section.
    return 100;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"RoyCard";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cellImg=(UIImage *)[cell viewWithTag:101];
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.7f];
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:cellImg cache:NO];
        //    [cell removeFromSuperview];
        [UIView commitAnimations];

    

    [UIView animateWithDuration:1.0 animations:^tableView.layer.transform = CATransform3DIdentity;
        tableView.layer.opacity = 1;];
       return cell;

【问题讨论】:

你能告诉我更多关于那个问题或给我看一些相关代码吗? 【参考方案1】:

如果你从- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath的方法内部调用翻转图像动画,只需从那里删除它。为它编写一个单独的方法,如果可能,将该方法编写为您的子类UITableViewCell 方法的一部分。在您的 - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath 中,只需在其默认状态下创建单元格。

您需要做的是,在您的应用程序加载后,第一次在viewDidAppear 中,您将必须获取UITableView- (NSArray *)visibleCells 方法可见的所有单元格。这将返回当前可见的所有单元格。然后,对于每个单元格,您可以调用您编写的图像翻转方法。之后,当用户滚动您的表格视图时,您可以根据您的要求使用UIScrollViewDelegate 协议的- (void)scrollViewDidScroll:(UIScrollView *)scrollView 等方法。但为此,您必须设置 UITableView 的代表。

【讨论】:

我应该在 - (NSArray *)visibleCells & - (void)scrollViewDidScroll:(UIScrollView *)scrollView 中写什么? 我不明白,请帮助我如何?【参考方案2】:

当您说打开应用程序时,您的意思是从后台返回应用程序吗?

如果是,那么您应该在此处遵循此答案。 https://***.com/a/5278108/1029360

从后台打开应用不会调用viewWillAppear 方法。您应该听取该答案中提到的通知,并在收到通知时调用表视图重新加载。

【讨论】:

我的意思是当我第一次在模拟器上运行代码时,我需要直接翻转图像而不做任何滚动 您是否尝试从您的 viewWillAppear 或 viewDidApppear 方法中调用图像翻转方法? 尝试将您发布的代码移动到 tableView:willDisplayCell 委托方法。

以上是关于我正在尝试使用此代码制作网格视图动画,但我没有使用此代码获取网格视图动画。你能帮我怎么做吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作这个浮动视图动画

当 CABasicAnimation 正在制作动画时,我该如何回调?

我正在使用 SpriteKit 制作游戏,但我的视图只占据了屏幕上看似安全的区域。如何扩展此视图?

在自定义视图中制作 2 个动画

现有的 UITableView 照片网格没有正确旋转?

Open GL ES 中的动画网格