2013-08-16 55 views
1

編輯:它看起來像問題代碼是在程序的背景下,我畫的UIView,然後我作爲子視圖添加到UIScrollView。程序代碼如下。它繪製了箱形,看起來有點像天際線。任何想法,爲什麼這是放慢我的UIScrollView的第一遍?它有時可能多達千像素寬或更多。請查看圖片...爲什麼UIView drawRect導致UIScrollview的第一遍波濤洶涌/生澀/緩慢?

- (void)drawRect:(CGRect)rect 
{ 
UIBezierPath *vertLine = [[UIBezierPath alloc] init]; 

[vertLine moveToPoint:CGPointMake(0,self.frame.size.height)]; 

int detail = 10; 
int ranNum = 0; 
int count = self.bounds.size.width/detail; 
CGFloat heightIncrement = 0.0; 

CGFloat minHeight = self.frame.size.height; 

CGFloat xPos = 0; 
CGFloat yPos = self.frame.size.height-20; 

for (int i =0; i<count; i++) 
{ 
    ranNum += (arc4random() % 9)-5; 

    yPos -= (arc4random() % 30); 
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)]; 

    xPos += (arc4random() % 20)+10; 
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)]; 

    yPos += (arc4random() % 30); 
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)]; 

    xPos += (arc4random() % 30); 
    [vertLine addLineToPoint:CGPointMake(xPos,yPos)]; 

    if (yPos>self.frame.size.height-10) { 
     yPos = self.frame.size.height-10; 
    } 

    if (yPos<self.frame.size.height-50) { 
     yPos = self.frame.size.height-50; 
    } 

} 

[vertLine addLineToPoint:CGPointMake(count*20,(self.frame.size.height))]; 

[[UIColor colorWithRed:0.0/255.0 green:38.0/255.0 blue:51.0/255 alpha:1] setFill]; 

[vertLine fill]; 

} 

Procedural background drawn in drawRect causing slow UIScrollView

我有一個生澀滾動視圖,但只在第一輪。在滾動視圖中查看所有視圖後,它非常平滑。

第一遍:在第一遍時,看起來每個UIImageView進入視圖(從右到左)當它進入可見區域時有一個混亂。所以如果你參考附加的圖像,你會看到UIImageView 5從右到左進入。發生這種情況時會有一個小暫停,就好像滾動視圖正在告訴圖像視圖加載/準備在舞臺上一樣。我試圖分析這個,但我沒有看到我的代碼中的任何問題,我不知道如何可以配置我沒有覆蓋的方法等。因此,一個子問題將是...在UIScrollView的子視圖進入可見區域時調用哪些方法?

正如我所提到的,我嘗試過使用異步和其他併發方法,但似乎無論圖像如何加載,第一遍都是不穩定,然後就好像UIScrollView緩存子視圖。是否有可能做到這一點緩存/加載前... [scrollView cacheSubViews];我寧願有一個比第一次滾動時笨重的啓動更慢的啓動。

感謝您對此的任何想法或有關UIScrollView如何與其子視圖一起工作的信息。我已經看到很多問題和一些解決方案,用UIImageView作爲子視圖來解決生澀的UIScrollViews問題。我嘗試了很多,但仍然有一個慢滾動視圖。 奧斯汀

+0

你可以把代碼嗎? – geekchic

+0

好吧,讓我建立一個示例...但它只是UIImageViews在UIScrollView ... –

+0

這絕對是因爲你正在下載圖像並同步顯示在uiimageviews中。我認爲你正在從服務器下載圖像。你應該在後臺下載圖像,然後使用主線程你應該用戶界面(即在桌面視圖中顯示圖像)。我從網上獲得的示例之一:http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial –

回答

0

imageWithContentsOfFile是一個同步過程中需要大量的tile.Use的一些異步方式來加載圖像,並可以實現平滑

相關問題