jsc*_*idt 5 iphone core-graphics uiscrollview core-text ios
我有一个UIView的子类,它实现了绘制CoreText的代码.在应用程序中,UIView是在UIScrollView中绘制的.这是我目前在drawRect中使用的代码:渲染NSAttributedString:
CGContextRef context = UIGraphicsGetCurrentContext();
float viewHeight = self.bounds.size.height;
CGContextTranslateCTM(context, 0, viewHeight);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, 1.0));
CGMutablePathRef path = CGPathCreateMutable();
CGRect bounds = CGRectMake(PADDING_LEFT, -PADDING_TOP, self.bounds.size.width-20.0, self.bounds.size.height);
CGPathAddRect(path, NULL, bounds);
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)attrString);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CFRelease(framesetter);
CFRelease(path);
CTFrameDraw(frame, context);
Run Code Online (Sandbox Code Playgroud)
在我的NSAttributedString中,我有一些文本属性来为文本着色.
我需要帮助的是概念上,应该如何实现?我对所有绘制框架,图层等的各种方法感到困惑.我试图查看几本书和其他资源,但我觉得我缺少一些基本的东西.
这是我的要求:
我非常感谢任何帮助.
这是我到目前为止所尝试的:
我添加了一个新的UIView作为UIScrollView的子视图以包含亮点.然后我为突出显示添加单独的UIViews.当我创建虚拟"测试"高亮显示时,它们在CoreText视图下正确显示.我也可以轻松改变高光颜色.但是,当我从CoreText视图获取有关线条的实际信息以创建真实高光时,它返回零线.这可能是因为drawRect还没有完成绘图还是其他什么?
以下是一些问题:
我见过这个开源项目:
https://github.com/Cocoanetics/NSAttributedString-Additions-for-HTML
这是它能做的惊人,但比我需要的要复杂得多.代码使用CoreText呈现每个单独的字形,并允许突出显示,这很棒.但是,我试图保持我的代码简单和轻量级.我对CoreGraphics,CoreAnimation或CoreText知之甚少.
我也看到过这个问题:
该问题的答案提供了确定给定行中给定范围的Rect的边界的调用.我想我可以搞清楚这些电话.
UPDATE
这就是我现在所做的.我确定这是错的,但这是我能找到的唯一方法让它发挥作用......
每次将高亮显示添加到容器或更改颜色时,都不会调用drawRect.但是,我知道这不是一个理想的解决方案.此解决方案的问题:
你的基本想法对于突出显示来说还不错。我不知道这是否真的比在绘图时突出显示字形更容易,但这不是一个坏主意,并且可以轻松打开和关闭突出显示,所以这非常好。
与其创建大量视图,不如将核心文本放在一个视图上CALayer。然后您可以创建额外的突出显示图层来覆盖文本。这将所有内容都保留在一个视图中。图层比视图便宜得多。如果您只是尝试进行“荧光笔”样式突出显示,那么您只需为图层设置 和 即可完成backgroundColor。frame
| 归档时间: |
|
| 查看次数: |
2757 次 |
| 最近记录: |