回答
我不認爲你可以添加一個UIView子類到CALayer對象。但是,如果您想在CALayer對象上繪製文本,可以使用NSString UIKit additions中提供的繪圖函數完成,如下所示。當我的代碼在委託的drawLayer:inContext方法中完成時,可以在子類的drawInContext:方法中使用相同的代碼。是否有任何特定的UILabel功能需要使用?
- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGContextSetFillColorWithColor(ctx, [[UIColor darkTextColor] CGColor]);
UIGraphicsPushContext(ctx);
/*[word drawInRect:layer.bounds
withFont:[UIFont systemFontOfSize:32]
lineBreakMode:UILineBreakModeWordWrap
alignment:UITextAlignmentCenter];*/
[word drawAtPoint:CGPointMake(30.0f, 30.0f)
forWidth:200.0f
withFont:[UIFont boldSystemFontOfSize:32]
lineBreakMode:UILineBreakModeClip];
UIGraphicsPopContext();
}
你的UILabel已經有一個CALayer的背後。如果您將幾個CALayer放在一起,則可以將UILabel的圖層添加爲其中一個的子圖層(通過使用其layer
屬性)。
如果它是直接在您想要的圖層中繪製文本,UIKit NSString增加了Deepak指出的方法。舉個例子,Core Plot framework有一個獨立於Mac/iPhone平臺的CALayer子類,它可以進行文本渲染,CPTextLayer。
嘿布拉德,我實際上曾經使用這種技術,(向CALayer添加一個UILabel的圖層),似乎它可能停止工作在iOS 8基礎SDK中?我已經開始重建一個我創建的導出視頻的舊應用程序,並且父CALayer的子層似乎與這個舊代碼保持無效。可能是其他問題,要繼續尋找。 – 2015-05-17 21:44:21
修正了它。對於一直在尋找如何針對iOS 8 Base SDK編譯這項工作的人,請在將標籤圖層添加到另一個CALayer之前調用[label.layer display]。信用:http://stackoverflow.com/questions/23171790/is-it-safe-to-add-a-stolen-uilabels-layer-to-some-other-calayers-sublayer – 2015-05-17 22:17:05
添加一個CATextLayer作爲子圖層並設置字符串屬性。這將是最簡單的,您可以輕鬆使用佈局管理器來使其非常通用。
... _可以輕鬆地使用佈局經理_... 那麼,在MacOS,是的,但不是在iOS。 iOS中的CALayers不支持佈局管理器:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layout.html – Dalbergia 2011-12-21 20:43:56
不知道!多謝,夥計。 – 2012-01-10 00:06:11
CATextLayer *label = [[CATextLayer alloc] init];
[label setFont:@"Helvetica-Bold"];
[label setFontSize:20];
[label setFrame:validFrame];
[label setString:@"Hello"];
[label setAlignmentMode:kCAAlignmentCenter];
[label setForegroundColor:[[UIColor whiteColor] CGColor]];
[layer addSublayer:label];
[label release];
恕我直言,這是一個比自定義CALayer或圖層委託更簡單的解決方案,只要你不需要超過基本的文本繪圖。 CATextLayer已經知道如何繪製文本,所以不需要重新發明輪子。 – Dalbergia 2011-12-21 20:43:10
@ Mshah2爲什麼文本正在提供非抗鋸齒效果?文字看起來像被放大了 – sreekanthk 2014-12-19 07:40:11
您需要調整CALayer的內容比例,否則您會在視網膜(@ 2x)或@ 3x設備上看到模糊的文字。使用:label.contentsScale = [UIScreen mainScreen] .scale; – yonel 2015-01-28 14:30:27
永遠記得刪除先前的子層,如果你要再加一條,以避免重複的觀點:
if let sublayers = layer.sublayers {
for sublayer in sublayers {
sublayer.removeFromSuperlayer()
}
}
- 1. 將CALayer添加到UILabel文本
- 2. 將CALayer添加到MKOverlayRenderer?
- 3. 將文本添加到CCSprite
- 4. 將文本添加到UIScrollView
- 5. 將文本添加到PDF
- 6. 將文本添加到QTabWidget
- 7. 將文本添加到Alternativa3d?
- 8. 將文本添加到JTextArea
- 9. 將文本添加到PDF
- 10. 將文本添加到QListWidget
- 11. 將文本添加到文本(jQuery)
- 12. 將信息添加到文本文件
- 13. 將列添加到文本文件
- 14. 將文本添加到TXT文件
- 15. 將文本添加到dxf文件
- 16. 下小牛添加CIFilter到的CALayer?
- 17. 在下面添加CALayer UIView
- 18. 在CALayer中添加UIImage
- 19. CALayer addsublayer不添加子圖
- 20. 將圖像添加到遮罩層(CALayer)內的按鈕?
- 21. 如何將CALayer添加到Mac OS X上的NSView
- 22. 將CALayer添加到UITableViewCell滾動後刪除
- 23. 我可以將自定義委託添加到自定義CALayer
- 24. 旋轉90度後,如何將圖像添加到CALayer背面?
- 25. 將一些文本添加到QToolBar中
- 26. 將RTE添加到salesforce文本區域
- 27. d3將文本添加到SVG矩形
- 28. 將文本添加到Compose.jl圖形
- 29. 將文本添加到grid.table圖
- 30. 如何將CommandParameter添加到文本
[的UIColor darkTextColor]設置]當圖形上下文已被推 – rpetrich 2010-02-06 10:37:13
也適用@ Deepak Danduprolu這個工作對我來說,但我徘徊爲什麼要調用推送和彈出功能,使其工作 – zeroleaf 2016-01-10 02:45:32