編輯:它看起來像問題代碼是在程序的背景下,我畫的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];
}
我有一個生澀滾動視圖,但只在第一輪。在滾動視圖中查看所有視圖後,它非常平滑。
第一遍:在第一遍時,看起來每個UIImageView進入視圖(從右到左)當它進入可見區域時有一個混亂。所以如果你參考附加的圖像,你會看到UIImageView 5從右到左進入。發生這種情況時會有一個小暫停,就好像滾動視圖正在告訴圖像視圖加載/準備在舞臺上一樣。我試圖分析這個,但我沒有看到我的代碼中的任何問題,我不知道如何可以配置我沒有覆蓋的方法等。因此,一個子問題將是...在UIScrollView的子視圖進入可見區域時調用哪些方法?
正如我所提到的,我嘗試過使用異步和其他併發方法,但似乎無論圖像如何加載,第一遍都是不穩定,然後就好像UIScrollView緩存子視圖。是否有可能做到這一點緩存/加載前... [scrollView cacheSubViews];我寧願有一個比第一次滾動時笨重的啓動更慢的啓動。
感謝您對此的任何想法或有關UIScrollView如何與其子視圖一起工作的信息。我已經看到很多問題和一些解決方案,用UIImageView作爲子視圖來解決生澀的UIScrollViews問題。我嘗試了很多,但仍然有一個慢滾動視圖。
奧斯汀
你可以把代碼嗎? – geekchic
好吧,讓我建立一個示例...但它只是UIImageViews在UIScrollView ... –
這絕對是因爲你正在下載圖像並同步顯示在uiimageviews中。我認爲你正在從服務器下載圖像。你應該在後臺下載圖像,然後使用主線程你應該用戶界面(即在桌面視圖中顯示圖像)。我從網上獲得的示例之一:http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial –