2012-05-10 42 views
1

我有一個UIView子類MyTextView,我添加到scrollView,它只是有一堆文本,但它有時會變得非常長(大約50,000像素高)。使用常規繪圖方法,如NSString'sdrawInRect方法顯然不是正確的方法來做到這一點,所以現在我正在研究CATiledLayer來幫我畫出文字。不幸的是,沒有足夠的例子來幫助用CATiledLayer繪製文本,我想知道是否有人知道我可以如何開始這項任務。使用CATiledLayer繪製文字

使用CATiledLayer我最好的選擇,當涉及到在UIScrollView中繪製真正的長文本?

(我不想使用UITextView,因爲它也是可以滾動的 - 即使我使用它,我也不希望它是可滾動的,我會將其框架設置爲50,000像素高,並且這不能解決我的問題(請記住,我將這個視圖添加到scrollView中,所以scrollView中的UITextView並不是很有趣))。

任何想法?

回答

0

我不知道它CATiledLayer是最好但爲了讓你開始,你可以自己繪製每個瓷磚的文字內容。

創建層,並設置委託:

CATiledLayer *tiledLayer = [CATiledLayer layer]; 
    tiledLayer.delegate = self; 
    tiledLayer.tileSize = CGSizeMake(768, 1024); 
    tiledLayer.levelsOfDetail = 4; 
    tiledLayer.levelsOfDetailBias = 2; 
//etc..... 

然後就正常CGContext上繪製代碼:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 

你可以得到瓷磚RECT和/或比例繪製

CGRect rect = CGContextGetClipBoundingBox(ctx); 
CGFloat scale = CGContextGetCTM(ctx).a; 

關於設置圖層代表文檔的一個詞:

在iOS中,如果圖層與UIView對象關聯,則必須將此屬性 設置爲擁有該圖層的視圖。

+0

創建該圖層後我該如何處理該圖層?我如何將它添加到視圖? – Snowman

+0

我做了'[self.view.layer addSublayer:tiledLayer]; [self.view.layer setNeedsDisplay];'但委託方法永遠不會被調用.. – Snowman

+0

只是一個想法,但你有沒有設置tiledLayer框架?有些代碼很難說。你可以嘗試創建一個單獨的委託類來處理drawLayer調用,並在你的UIView類中實例化。 –