我的代碼我的坑(二) —— UIImageView動畫點擊后動畫和圖片消失的問題(一)

版本記錄

版本號 時間
V1.0 2018.08.08

前言

做了好幾個APP,碰到了大大小小的很多坑,以前碰到坑,解決了就結束了,這里想把自己碰到的坑記錄下來,一來給自己備查二來希望可以幫助到大家。感興趣的可以關注下,也歡迎大家補充留言,感興趣的看上面幾篇文章。
1. 我的代碼我的坑(一) —— 自簽名證書導致請求取消的問題(一)

問題描述

在做loading或者其他序列幀動畫的時候,我們可以采用的一個方案就是在控件UIImageView上直接進行動畫。

有一個場景就是如果該UIImageView向上傳遞的響應鏈中如果有tableview或者collectionview等控件,那么當我們UIImageView在進行動畫的時候,如果點擊界面,那么UIImageView的動畫就會立即停止圖片也會消失,具體如下圖所示。

這里根視圖是一個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動畫點擊后動畫和圖片消失的問題,感興趣的給個贊或者關注~~~~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容