版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2019.04.14 星期日 |
前言
做了好幾個APP茵乱,碰到了大大小小的很多坑孟岛,以前碰到坑,解決了就結(jié)束了在验,這里想把自己碰到的坑記錄下來,一來給自己備查二來希望可以幫助到大家盏触。感興趣的可以關(guān)注下,也歡迎大家補充留言雌芽,感興趣的看上面幾篇文章世落。
1. 我的代碼我的坑(一) —— 自簽名證書導致請求取消的問題(一)
2. 我的代碼我的坑(二) —— UIImageView動畫點擊后動畫和圖片消失的問題(一)
3. 我的代碼我的坑(三) —— iOS9系統(tǒng)WKWebView加載頁面白板的問題(一)
4. 我的代碼我的坑(四) —— iOS12系統(tǒng)自定義漸變色UISwitch手機橫屏的異常問題(一)
5. 我的代碼我的坑(五) —— 不可編輯狀態(tài)的UITextView文本高度大于視圖高度默認滾動到底部的問題(一)
6. 我的代碼我的坑(六) —— UITextField輸入長度自動截取時漢字和拼音帶來的末位截取不能正常輸入漢字的問題(一)
問題描述
大家在用UIImageView做序列幀動畫的時候屉佳,總會碰到幾個問題:
- 1) 首先是
startAnimating
動畫結(jié)束以后沒有動畫完成的API回調(diào)洲押。 - 2) 然后是動畫完成以后如果不特殊邏輯設(shè)置杈帐,動畫結(jié)束以后UIImageView就類似于
隱藏了
,看不到任何界面效果累铅。 - 3) 最后是注意內(nèi)存和耗電的問題站叼。
問題解決
首先看一下第一個問題,沒有回調(diào)我們就只能計算换薄,通過輪數(shù)和播放一輪的時間數(shù)的乘積獲取到動畫時間,然后執(zhí)行一定的延時复旬,在延時方法里做動畫結(jié)束的邏輯驹碍。
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self performSelector:@selector(animationDidFinish) withObject:self afterDelay:self.animationImageView.animationRepeatCount * self.animationImageView.animationDuration];
在執(zhí)行之前別忘記先要cancel一下凡恍。
看一下第二個問題,看一下示例代碼和效果實現(xiàn)浮还。
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *animationImageView;
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) NSMutableArray *imageArrM;
@end
@implementation ViewController
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
[self loadImageSource];
[self.timer fire];
}
#pragma mark - Object Private Function
- (void)loadImageSource
{
[self.imageArrM removeAllObjects];
for(NSInteger i = 0; i < 25; i++){
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"loading%ld", i]];
[self.imageArrM addObject:image];
}
}
#pragma mark - Action && Notification
- (void)onTimerDidRun
{
NSLog(@"onTimerDidRun");
self.animationImageView.animationImages = [NSArray arrayWithArray:self.imageArrM];
self.animationImageView.animationDuration = 1;
self.animationImageView.animationRepeatCount = 3;
[self.animationImageView startAnimating];
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self performSelector:@selector(animationDidFinish) withObject:self afterDelay:3 * 1];
}
- (void)animationDidFinish
{
[self.animationImageView stopAnimating];
}
#pragma mark - Getter && Setter
- (NSTimer *)timer
{
if(!_timer){
_timer = [NSTimer timerWithTimeInterval:10 target:self selector:@selector(onTimerDidRun) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
}
return _timer;
}
- (NSMutableArray *)imageArrM
{
if(!_imageArrM){
_imageArrM = [NSMutableArray array];
}
return _imageArrM;
}
@end
下面看一下運行效果
這里看見每次循環(huán)三次動畫然后UIImageView
就"隱藏了",如果這個時候我們要有其他的需求洼冻,比如說動畫結(jié)束后要展示一個靜態(tài)圖像怎么辦隅很?其實就需要在動畫結(jié)束回調(diào)中給控件添加個image就可以了。
- (void)animationDidFinish
{
self.animationImageView.image = [UIImage imageNamed:@"loading0"];
[self.animationImageView stopAnimating];
}
下面看一下效果
這里就是在動畫結(jié)束的回調(diào)中加入一個簡單的給控件添加image的邏輯屋彪。
后記
本篇主要講述了UIImageView做序列幀動畫結(jié)束后沒有回調(diào)并且“隱藏”的問題撼班,感興趣的給個贊或者關(guān)注~~~