2010-11-21 97 views
5

我的情況:我創建了一個帶有UIView的UIScrollView,其中調用了一個Graph類,該類可以在上下文中繪製出一個漂亮的圖形。 現在我發現如果寬度大於8192像素,手機將無法呈現UIView。事實上,根據蘋果的文檔,如果我想要它大於1024像素,我應該實現CATiledLayer。但是經過閱讀和google搜索之後,我仍然很難理解CATiledLayer的這個任務的基礎知識 - 我在Quartz和Cocoa以及圖層和子圖層與視圖和子視圖之間有點失落。UIScrollView和CATiledLayer從零開始

理想情況下,我希望保持Graph類不變,只需完全繪製上下文,將其拆分爲多個tile並將其滾動。滾動視圖應該滾動水平,不需要縮放或垂直滾動​​。那可能嗎?如果是這樣,我應該如何繼續? 也許有人可以給我一個輪廓,只是一些bulletpoints或僞代碼,我應該如何重構scrollview,uiview和圖類來使用平鋪。

非常感謝您的任何答覆。

回答

4

自從你問了一個月後,這可能仍然有用。今晚我剛開始使用CATiledLayer。我覺得後面的CATiledLayer的想法似乎是你將它添加到一個視圖:

CATiledLayer *tiled = [CATiledLayer layer]; 
[self.view.layer addSublayer:tiled]; 

和您設置一個委託,實施只有一個方法:

MyTLDelegate *myDelegate = [[MyTLDelegate alloc] init]; 
tiled.delegate = myDelegate; 
// I haven't checked if CATiledLayer retains myDelegate, check this! 

... 
@implementation MyTLDelegate { 

-(void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)ctx 
{ 
    CGRect dirtyRect = CGContextGetClipBoundingBox(ctx); 
    // draw! 
} 

這基本上是所有有它,你可以畫出整個座標空間就在那裏。所以你只需要稍微修改你的Graph類,這樣它就可以作爲一個CATiledLayer委託。在我的情況下,花了20分鐘,將用戶體驗提高了幾個數量級。 (與進行繁瑣的滾動,縮放和重新繪製相比)

ps。這只是您要求的僞代碼,您可能需要一些額外的膠水才能完成任務質量和/或框架尺寸。