我的代码我的坑(二) —— UIImageView动画点击后动画和图片消失的问题(一)

版本记录

版本号 时间
V1.0 2018.08.08

前言

做了好几个APP,碰到了大大小小的很多坑,以前碰到坑,解决了就结束了,这里想把自己碰到的坑记录下来,一来给自己备查二来希望可以帮助到大家。感兴趣的可以关注下,也欢迎大家补充留言,感兴趣的看上面几篇文章。
1. 我的代码我的坑(一) —— 自签名证书导致请求取消的问题(一)

问题描述

在做loading或者其他序列帧动画的时候,我们可以采用的一个方案就是在控件UIImageView上直接进行动画。

有一个场景就是如果该UIImageView向上传递的响应链中如果有tableview或者collectionview等控件,那么当我们UIImageView在进行动画的时候,如果点击界面,那么UIImageView的动画就会立即停止图片也会消失,具体如下图所示。

我的代码我的坑(二) —— UIImageView动画点击后动画和图片消失的问题(一)_第1张图片

这里根视图是一个collectionview,当我点击这个界面的时候UIImageView动画停止并且消失了,这是为什么?下面会给出解决方法。


问题解决

原因

首先说一下原因吧。

这个是因为我们向上的响应链中有tableview或者collectionview等控件,当我们点击界面的时候,它们就会响应自己的highlight状态,而一般我们利用UIImageView做动画的时候,只是给赋值一个序列帧数组,不会设置什么hightlight状态,所以在hightlight状态的时候,UIImageView的动画图片会立即消失,本身如果不设置hightlight对应的图片的话也会直接隐藏掉,所以,给大家的直观感觉就是:当我点击界面的时候动画和控件全部消失了。

解决办法

这里有两个方法可以解决这个问题:

  • 给UIImageView设置highLight图片数组,在点击界面的时候,重新调用startAnimating的方法。
  • 重写UICollectionview的一个代理方法,并返回NO,其实这个方法就是取消了cell的highLight点击状态。
- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

大家如果细心的看API会发现,里面已经给了这个点击的过程,这些代理方法的调用顺序。

// Methods for notification of selection/deselection and highlight/unhighlight events.
// The sequence of calls leading to selection from a user touch is:
//
// (when the touch begins)
// 1. -collectionView:shouldHighlightItemAtIndexPath:
// 2. -collectionView:didHighlightItemAtIndexPath:
//
// (when the touch lifts)
// 3. -collectionView:shouldSelectItemAtIndexPath: or -collectionView:shouldDeselectItemAtIndexPath:
// 4. -collectionView:didSelectItemAtIndexPath: or -collectionView:didDeselectItemAtIndexPath:
// 5. -collectionView:didUnhighlightItemAtIndexPath:

下面看一下修改后的结果,无论怎么点击根视图是一个collectionview的这个界面,UIImageView动画都不会消失了,如下所示。

我的代码我的坑(二) —— UIImageView动画点击后动画和图片消失的问题(一)_第2张图片

后记

本篇主要讲述了UIImageView动画点击后动画和图片消失的问题,感兴趣的给个赞或者关注~~~~

我的代码我的坑(二) —— UIImageView动画点击后动画和图片消失的问题(一)_第3张图片

你可能感兴趣的:(我的代码我的坑(二) —— UIImageView动画点击后动画和图片消失的问题(一))