2011-03-05 38 views
1

我有一個UIScrollView具有非常大的內容視圖,它是一個書架上有大約1000個項目,當滾動視圖內容變得超過16000px左右高時,它顯示黑色背景和所有圖形重疊/融合在一起。大背景圖案UIScrollView失敗

下面是示例代碼

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Doesn't work 
    int sizeForContent = 20000; 

    // Does Work 
    //sizeForContent = 10000; 


    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

    UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, sizeForContent)]; 
    subView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"wood.jpg"]]; 
    [scroll addSubview:subView]; 
    [subView release]; 

    scroll.contentSize = CGSizeMake(self.view.frame.size.width, sizeForContent); 
    [self.view addSubview:scroll]; 

    [scroll release]; 

} 

有誰知道爲什麼會這樣?我認爲這與內存限制有關,但似乎並沒有使用太多內存。

我知道我可以直接設置滾動視圖背景顏色,而不是添加子視圖並設置背景,但我需要將scrollview背景作爲顏色。

如果您想查看問題,可以從http://cl.ly/2i3F3q0G1j3q433n0f1E獲取基本xcode項目。

任何幫助或解釋非常感謝。

+0

一個方法可以是將圖像設置爲視圖的背景並將scrollView的背景色設置爲清除顏色......但是在這種情況下,您只需要放棄當前發生的背景圖像的滾動功能場景。 – Tobias 2011-03-05 15:36:48

回答

0

MHM,我也想,這是一個內存問題...

儘量避免這種:

subView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"wood.jpg"]]; 

我假設當你這樣做的Xcode加載一個小JPG格式,但再畫你的UIView的整個區域,在該,將有一個大的「形象」,以保持在內存中...

嘗試使用剛剛填充顏色來代替,而看看是否有變化?

如果是這樣,一個可能的解決方案可能是爲您的視圖使用CATiledLayer,所以只有您的大UIView的可見部分將在內存中(帶來不便,用戶每次滾動時都會看到它繪圖...)

0

我也面臨同樣的問題。我有一個很長的圖像,我只是想在滾動時執行一個panaroma效果。如果我使用CATiledLayer,它是否會提供這種平滑性。我不認爲會那麼順利。因爲每當它滾動時它都會繪製。我只是想要像標準的iPhone應用程序圖標一樣滾動首頁。

0

我通過創建具有圖案背景的視圖,並添加滾動視圖作爲子視圖與[UIColor clearColor]背景來解決它。