2012-10-18 156 views
1

我使用水平UIScrollView,在屏幕的前半部分顯示照片。 (想象一下CGRect(0,0,320,120)),第一個scrollView被嵌入到第二個scrollview中,它佔據了所有的屏幕,當我向下滾動頁面時(第二個scrollView),第一個scrollview停止動畫,我編寫了一個NSTimer在第一個UIScrollView中每3秒更換一張照片,但是當我滾動第二個scrollView時,看起來動畫正在排隊,當我釋放屏幕的手指時,幾乎沒有照片轉換(即:2次更改if我不回採6秒)滾動總之:我怎麼可以使用塊(或別的東西),繼續我的動畫,而我滾動滾動視圖第二UIScrollView動畫問題

我的NSTimer(在viewDidLoad中)?

timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(changePage:) userInfo:nil repeats:YES]; 

回答

1

你的iOS應用程序有一個運行循環,不斷檢查用戶輸入等事情。如果它忙於檢測觸摸事件,那麼在該運行循環中計劃的事件將不會執行。 (同樣,如果你阻止主線程,例如一個大的服務器請求,那麼在此期間你將不會得到觸摸事件)。

這裏是你如何能得到的NSTimer右側運行循環:

首先,使用timerWithTimeInterval:target:selector:userInfo:repeats:創建不安排在一個運行循環的計時器。 其次,使用- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode在運行循環中調度定時器。對於模式參數(運行循環類型),請使用NSRunLoopCommonModes以允許計時器觸發而無需在主運行循環中等待。

請注意,例如, performSelectorAfterDelay如果在主運行循環中完成。它也適用於動畫完成塊。除了使用CoreAnimation之外,我不確定是否有解決動畫完成塊問題的簡單方法。

+0

嗨MaxGabriel,謝謝你的回答。我現在用「timer = [NSTimer timerWithTimeInterval:3.0 target:self selector:@selector(changePage :) userInfo:nil repeatats:YES];」即刻我的計時器,但現在它根本不工作,即使我什麼都不碰。我嘗試過實施addtimer,但我不明白它是如何工作的。也許你可能有一個真實的例子說明這是如何工作的?謝謝! – anthoprotic

+1

我沒有測試過這個,但代碼可能看起來像這樣:'[[NSRunLoop mainRunLoop] addTimer:<#NSTimer * timer#> forMode:NSRunLoopCommonModes];' 這段代碼的功能是首先調用NSRunLoop類的方法'mainRunLoop',它返回一個NSRunLoop類的實例 - 特別是主運行循環。然後,我們使用該運行循環來添加計時器,但採用普通運行循環模式。不要介意<##>語法 - 這就是你如何在Xcode中完成小藍自動完成的氣泡。 – MaxGabriel

+0

非常感謝,它的作品!我只是不明白這是如何工作的。這與NSOperation是同一回事嗎?我讀了一個地方做一個隊列「NSOperationQueue」並添加操作「NSInvocationOperation」,但它沒有奏效。 – anthoprotic