iOS中使用輪播圖遇到的問題

之前在項目中用了網上封裝好的輪播圖,數據是從服務器取回來,之前一直沒問題,直到今天,測試的時候加了一張輪播圖,程序就馬上崩潰了,然後開始找原因,一開始我懷疑是輪播那個控件的問題,便自己換了一個,後面才發現,結果還是一樣崩掉了,後面我在輪播圖切換的時候打印一些數據出來,後面才發現,從服務器取得新的數據之後,將原本的view設置爲nil,但是,控制檯還是在不斷的打印,自己研究了很久還是不知道哪裏的問題,跑去問了同事,同事直接問是不是開了線程了,一句話,我猛的想起,輪播圖裏面加了Timer來控制圖片的切換,好吧,問題終於找到了。

我們可以這樣來使用一個Timer

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(function:) userInfo:nil repeats:NO];


//這是一個執行一次,不重複的Timer


不過大多數情況下,我們需要的Timer都是需要不斷執行d 

下面是輪播控件裏面Timer的一個擴展:

@implementation NSTimer (Addition)

-(void)pauseTimer
{
    if (![self isValid]) {
        return ;
    }
    [self setFireDate:[NSDate distantFuture]];
}


-(void)resumeTimer
{
    if (![self isValid]) {
        return ;
    }
    [self setFireDate:[NSDate date]];
}

- (void)resumeTimerAfterTimeInterval:(NSTimeInterval)interval
{
    if (![self isValid]) {
        return ;
    }
    [self setFireDate:[NSDate dateWithTimeIntervalSinceNow:interval]];
}

@end
setFireDate:[NSDate distantFuture],可以讓Timer暫時的休眠,睡一下吧,年輕人.

setFireDate:[NsDate date],這個可以讓Timer重新煥發活力,重新開始運行

最後一個是在延遲多長時間後重新運行.

有時我們在界面切換到別的地方時候,我們需要在輪播圖停止切換,實際就是讓Timer休眠一下,我們可以這麼做:

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [_mBannerScrollView resumeTimer];
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [_mBannerScrollView pauseTimer];
}

在界面不可見的時候,讓Timer停止,界面可見的時候,Timer恢復正常運行.

最後,是Timer的釋放問題。

[timer invalidate];
timer = nil;

可以這樣將一個Timer釋放,防止出現我的view設置爲nil後Timer還在不斷的運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章