ach*_*ral 3 outline uilabel ios
我已经使用以下代码对UILabel进行了子类化,这可以正常工作 - 但是涉及子类的任何动画都比普通的UILabels慢很多.我认为Quartz是罪魁祸首,但是我能做些什么来加快速度?
- (void)drawTextInRect:(CGRect)rect
{
CGSize shadowOffset = self.shadowOffset;
UIColor *textColor = self.textColor;
// Establish the Quartz 2D drawing destination:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1);
CGContextSetLineJoin(context, kCGLineJoinRound);
// Draw the label’s outline:
CGContextSetTextDrawingMode(context, kCGTextStroke);
self.textColor = [UIColor whiteColor];
[super drawTextInRect:rect];
// Draw the label:
CGContextSetTextDrawingMode(context, kCGTextFill);
self.textColor = [UIColor textColor];
self.shadowOffset = CGSizeMake(0, 0);
[super drawTextInRect:rect];
self.shadowOffset = shadowOffset;
}
Run Code Online (Sandbox Code Playgroud)
@MobileOverlord所说的当然是适用的,特别是关于分析的部分.
我会注意到设置shouldRasterize = YES并不是一个全能的解决方案(如果是这种情况,Apple为什么不将它设置为默认值?).是的,它可以提高滚动性能,但它可以牺牲内存使用量来实现,因为你可以在缓存中找到一堆大图像.
它在创建时也会产生开销,我相信(但必须检查确定)包括一个屏幕外渲染过程来实际创建光栅化副本.根据图层的使用方式,这实际上可能会影响性能.
另一个需要考虑的因素是您的观点是否具有透明度.如果您可以向框架保证您的视图不透明(参见setOpaque/isOpaque),则可以通过不考虑与Alpha通道相关的所有复杂性来优化渲染.类似的注意事项适用于CALayer.
最后,在您展示的代码块之外,您是否对底层进行了偷偷摸摸的事情(例如设置阴影或角半径)?这也是一种快速杀死动画效果的方法.
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |