与核心文本垂直对齐?
如何在ctframesetter框架中更改文本的垂直对齐?我希望我的文字在中间,而不是在 top 中.我正在使用核心文本框架.有一个段落的设置,可以改变水平净化而不是垂直. 解决方案 最终发现了... CGRect boundingBox = CTFontGetBoundingBox(font); //Get the position on the y axis float midHeight = self.frame.size.height / 2; midHeight -= boundingBox.size.height / 2; CGPathAddRect(path, NULL, CGRectMake(0, midHeight, self.frame.size.width, boundingBox.size.height)); 其他解决方案 谢谢尼克,那是一个很棒的片段. 只是在这方面扩展,如果您的上,中间和底部与枚举进行对齐,例如,您可以这样做:
4 2024-01-24
编程技术问答社区
CTFramesetterSuggestFrameSizeWithConstraints有时返回不正确的尺寸?
在下面的代码中,CTFramesetterSuggestFrameSizeWithConstraints有时返回A CGSize,其高度不足以包含所传递的所有文本.我确实看了看这个答案.但是在我的情况下,文本框的宽度必须是恒定的.还有其他/更好的方法可以找出我的属性字符串的正确高度吗?谢谢! CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attributedString); CGSize tmpSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0), NULL, CGSizeMake(self.view.bounds.size.width, CGFLOAT_MAX), NULL); CGSize textBoxSize = CGSizeMake((int)tmpSize.widt
14 2023-12-18
编程技术问答社区
使用MonoTouch.CoreText在特定坐标处绘制文本片段
我正在尝试掌握Coretext,从示例应用程序工作 作为测试,我想写入以写入'n','e',s'和w'的测试. 各个位置.但是只有第一个('n')被绘制. 这是我的textdrawingview.cs的版本: using System; using System.Drawing; using MonoTouch.UIKit; using MonoTouch.Foundation; using MonoTouch.CoreText; using MonoTouch.CoreGraphics; namespace CoreTextDrawing { public class TextDrawingView : UIView { public TextDrawingView () { } //based upon docs.xamarin.com/recipes/ios/graphics_and_d
2 2023-12-17
编程技术问答社区
在一个不规则的形状内渲染CoreText
我正在寻找有关在带有孔的多边形内呈现NSAttributedString的视图的指导,包装和回流文本以适合几何形状.这不是CoreText,而是问题,而是将不规则形状划分为蹲矩形有序序列的一般问题. 尚未完全回答类似的问题: 如何用JavaScript中的文本填充形状 coretext的CTFramesetter不支持渲染到CGPath Coretext处理与文本布局和显示相关的令人难以置信的咕unt作品,所以我不禁怀疑我正在重新发明轮子.出于这个问题的目的,请假设我可以在给定的矩形内检查适合给定矩形内的子字符串,并考虑到Word Wrap和连字符. 编辑:自那时以来,我决定仅在边界之间的拟合尽可能多地扫描从左到右的绘图.即使我在自然单词边界上打破了,它看起来有些随意,因此我将感谢其他应用程序如何包装文本的指导. 编辑#2:现在看起来不错,因为它支持基本的单词包装并避免了非常短的行.我的问题一定太模糊了.感谢您的查看. 编辑#3: amorya指
2 2023-12-12
编程技术问答社区
苹果公司的文本渲染是如何绘制一个字体没有的字形的?
我对字体和编码有基本的了解,但是最近我必须在舒适区之外做些事情:将角色✖(0x2716"重乘x")变成CGPathRef. 我使用核心文本的CTFontGetGlyphsForCharacters来完成这项工作.我知道A CGGlyph实际上是给定字体支持的字形集中的索引.我很快发现,这个字形仅受iOS上的几个字体的支持,包括ZAPF Dingbats,这是我选择的. . 这是我的问题:我可以在任何字体中使用✖,只需将其粘贴.我在页面上进行了一些实验,在该页面上粘贴了文档,选择了它,然后不断更改字体.我做了类似的程序化实验.字形总是正确显示(从未改变).如果这些字体中的很少有✖,那么这是如何工作的?如果给定的字体没有这样的符号,是否有一组"后备字形"(我想这将是"后备字体")?如果是这样,是否有任何方法可以获取对这些字形的程序访问? 解决方案 核心文本中的后备字体列表被称为"级联列表",它是CTFontDescriptor(kCTFontCascadeListAttri
4 2023-11-06
编程技术问答社区
uitextview vs uilabel+scrollview
im在一个应用程序上工作,该应用需要一个视图控制器在其中显示大量的希伯来语(非英语)文本. 文本是从丰富的文本文件 的属性string 我需要有4件事. 平滑滚动 获取一个单词的范围,以便我可以自动浏览它(例如scrollRangeToVisible) 顺利更改字体(我想使用Uislider更改字体) 快速加载 从某种意义上说,我在寻找电子阅读器的功能,我只需要一个列,我希望它滚动而不是页面. 我尝试过的东西,有优点和缺点 常规uitextview&scrollview属于uitextview 专利: 轻松搜索和自动滚动 快速加载 光滑的字体更改 con: 非常断断续续的滚动 scrollview中的uilabel 专利: 搜索和自动滚动并不容易,但可以管理 非常光滑的滚动 con: 非常波动的字体开关 加载缓慢 我唯一没有尝试过的东西(我能想到的)是 coretext
2 2023-11-05
编程技术问答社区
uitextview文本背景颜色
我正在尝试获得透明的uitextview,我知道如何设置它.我也想要的就像已显示的文本下的彩色背景.同样,文本视图背景将将整个视图矩形设置为给定的颜色,我想要的是文本下方的颜色.任何实现此类事物的简单方法? 解决方案 我可以告诉您您试图对文本产生突出显示的影响.如果是这种情况,则可以使用NSATTributedString.它允许您设置文本的背景颜色,而不是视图背景. NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"Test String"]; [attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor lightGrayColor] range:NSMakeRange(0, 11)]; 然后在uitextview上设置属性text
6 2023-11-05
编程技术问答社区
在UITextView中检测换词情况
我通过扩展UITEXTVIEW来实现自定义的丰富文本编辑器.当用户选择文本范围并苹果"突出显示"菜单时,编辑器将为所选文本绘制蓝色背景: - (CGRect)getRectAtRangePos:(NSInteger)pos { UITextPosition *beginning = self.beginningOfDocument; UITextPosition *start = [self positionFromPosition:beginning offset:pos]; CGRect rect = [self caretRectForPosition:start]; return [self convertRect:rect fromView:self.textInputView]; } - (void)drawRange:(NSRange)range { CGContextRef context = UIGraphicsGetC
8 2023-11-05
编程技术问答社区
为UITextView添加轮廓线/笔画
我想在用户类型中添加大纲或中风UITextView文本.完全像模因: 我必须使用UITextView,因为我需要多行支持.我尝试了所有方法,并得出了必须使用CoreText的结论.我几乎所有的解决方案都起作用,但被困在文本视图包装中的文本中.在UITextView的subview中,我的drawRect例程正确绘制了轮廓文本,直到文本包装为止.即使包装了文本用户输入,我绘制的轮廓文本也不会.这是我的drawRect方法的实现: https://gith.github.com/44989888 .在第29行,我正在使用char包装: CTLineBreakMode linebreakmode = kCTLineBreakByCharWrapping; 我已经尝试了Wordswrapping选项(也是默认的),无用. 我的问题是: 我如何获得正确包装的文字,以作为键入文本的大纲显示? 解决方案 // make your UITextView as a subcl
6 2023-11-05
编程技术问答社区
用属性字符串替换UITextViews文本
我有一个UITextView,当用户输入文本时,我想即时格式化文本.诸如语法突出显示... 为此,我想使用UITextView ... 一切正常,期望一个问题:我从文本视图中获取文本,然后从中拿出NSAttributedString.我对此属性字符串进行了一些编辑,并将其设置为textView.attributedText. 每次用户类型时都会发生这种情况.因此,我必须在编辑对attributedText之前记住selectedTextRange并将其放回原处,以便用户可以继续在他之前键入的位置打字.唯一的问题是,一旦文本足够长以需要滚动,UITextView现在,如果我慢慢打字,现在就会开始滚动到顶部. 这是一些示例代码: - (void)formatTextInTextView:(UITextView *)textView { NSRange selectedRange = textView.selectedRange; NSString *te
4 2023-11-05
编程技术问答社区
这是CoreText吗?-鸟巢文本捏合缩放展开
我正在考虑制作一个应用程序,用户可以更改UITextField的大小和方向.我正在研究鸟舍应用程序,我看到的是用户不仅可以增加或减少文本的大小,而且可以改变其方向. 所以我想问的问题是 1)他们是在使用CoreText来做到这一点 2)我不知道如何动态调整大小?他们是否使用UIView? 3)我已经谷歌搜索了CoreText教程,示例,检查Apple文档和示例项目,研究可可控制和GitHub,但我仍然看不到任何示例代码或教程,这些示例代码或教程将显示如何完成. 有人会足够友善地将我指向某个方向或教程吗? 解决方案 关于字体的外观,有几个选项: 您可以使用标准UILabel来实现您在此处看到的大部分效果(字体,大小,颜色,旋转).超出标准UILabel的一个功能是字体周围的白色中风.但是,有效的iOS 6,您还可以使用标准UILabel使用其 attributedText 属性//developer.apple.com/library/ios/#do
0 2023-11-05
编程技术问答社区
带有核心文本的自定义UITableView单元格
在@yaslam的帮助下,我在核心文本中创建了一个uilabel,它使用ctrubyannotation用furigana以水平和垂直方式显示日语文本.不幸的是我有问题.我需要在自定义单元格内使用此标签,并且需要根据文本动态调整单元格的高度.但是不要工作.单元不扩展 你能帮我吗? 非常感谢 以下是代码 import UIKit protocol SimpleVerticalGlyphViewProtocol { } extension SimpleVerticalGlyphViewProtocol { func drawContext(_ attributed:NSMutableAttributedString, textDrawRect:CGRect, isVertical:Bool) { guard let context = UIGraphicsGetCurrentContext() else { return }
12 2023-11-05
编程技术问答社区
UITableviewCell中的核心文本与其他单元格的内容重叠和重复,并叠加在一起。
我正在使用核心文本将文本添加到uitaiteViewCell的内容中,但是当我滚动和叠加在其他单元格上时,阿拉伯内容似乎正在重叠和重复. 我还使用页面上的其他元素,这些元素看起来不错并且没有重复.只是核心文字似乎正在重复. 我不知道原因. 这是我的代码: - (CTFontRef)newCustomFontWithName:(NSString *)aFontName ofType:(NSString *)type attributes:(NSDictionary *)attributes { NSString *fontPath = [[NSBundle mainBundle] pathForResource:aFontName ofType:type]; NSData *data = [[NSData alloc] initWith
2 2023-11-04
编程技术问答社区
如何在iOS上绘制带有文字包络的图像?
我想像以下样式一样绘制文本 - 图像始终在右上角,并且文本在图像周围. 谁能告诉我如何在iOS上实施此操作?我需要使用核心文本吗? 预先感谢! 解决方案 是的,Coretext是这样做的最佳方法.执行此操作的代码很长时间在此处发布.一些可能指向正确方向的代码在文章中"将cggrect剪切到cgpath." 如果这样做的过程仍然令人困惑,那么我和我终于写了我想写有关该主题的博客文章. 其他解决方案 步骤1:创建一个从Uiview 继承的对象 步骤2:覆盖 - (void)drawRect :( cgrect)rect方法 步骤3:将以下代码添加到此方法 /* Define some defaults */ float padding = 10.0f; /* Get the graphics context for drawing */ CGContextRef ctx = UIGraphicsGetCurrentContext(); /* C
0 2023-11-04
编程技术问答社区
RE: 自动旋转、滚动、列举、缩进的UIScrollView的属性字符串
这是一种生产的愚蠢,由于我在将其放在一起的贡献者方面得到了很多帮助,因此发布结果似乎很公平(作为答案,下面).如果您正在寻找涉及iOS和核心文本中属性字符串和滚动的示例,则它们是组装的. 一些额外的积分: 包装: 这是由属性字符串的LineBreakMode完成的,该线Brockmode默认要包装.您将无法从字符串中检索柔软的线路断裂(与Cocoa不同,Nstextview在弦上放上" \ n"字符).但是您不需要.您可以依靠Core Text的FrameSetter在给定帧中为您提供字符串的高度 - 只要您将领先的信息放入属性字符串中. catextlayer: 与之合作很方便.您要做的就是分配一个属性字符串,然后包装和绘制.如果您有一个短字符串可以使用选定的字体显示,那就太好了.但是Catextlayer无法识别领先或缩进,因此对于这个项目,我直接将其吸引到Calayer. 字体: 我在大多数情况下都坚持使用CTFONTREF,因为它是在iO
6 2023-11-04
编程技术问答社区
UIScrollView内的核心文本段落模糊不清
我尝试在uiscrollview内部的视图中绘制一个长段作为nsattribatedstring.奇怪的是,段落的顶部不是模糊,而是我滚动到底部的范围越多!我很清楚您在石英和浮子方面可能遇到的小问题,因此我试图将视图的框架设置为下面的0.5点.现在,我的段落的顶部是模糊的,底部还可以(!)我真的不知道该如何解决,并且会喜欢任何帮助! ! 谢谢! 解决方案 我与模糊文本有关的每个问题一直与将文本定位在子像素偏移量有关.在某个地方,您可能的位置不是整数,您应该将其围绕或向下围绕.您可能想检查的地方: 您的UIScrollView 的位置 您的滚动视图的contentOffset 中覆盖drawRect的观点的位置 您实际上为CoreText调用而真正绘制的RECT(路径) 我意识到这个问题已经有几个月了,但是无论如何都有答案很有用!
4 2023-11-04
编程技术问答社区
如何通过改变高亮颜色来突出CoreText?
我有一个Uiview的子类,该子类实现代码绘制CoreText.在应用程序中,该Uiview在UISCrollView中绘制.这是我当前在drawRect中使用的代码:渲染nsattribedstring: 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
0 2023-11-04
编程技术问答社区
NSAttributedString高度受宽度和行数限制
我需要在自定义标签中计算不使用uilabel的sizethatfits方法的文本rect.下面的代码无法正常工作.主要想法是在index = numberOflines -1处找到CTLINE,然后返回其最大位置.但是结果文本高度有时太大,有时不足以绘制最后一行. - (CGSize)fittingSizeWithSize:(CGSize)size numberOfLines:(NSInteger)numberOfLines { if (numberOfLines == 0) { return [self fittingSizeWithSize:size]; } CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self); if (framesetter == NULL) {
4 2023-11-03
编程技术问答社区
在UILabel的文本前后画线
我想在UILabel中的字符串之前和之后绘制一条线,就像以下图像: ps:文本不是静态的,所以我无法分辨出什么是确切的文本宽度,否则我会在文本之前和之后放两个静态线. ps:我也不能将标签放在一条线上,并给出标签背景颜色与视图背景相同,因为我在较低的视图中具有渐变颜色. 解决方案 我希望下面是您想要的... #import "ViewController.h" @interface ViewController () { UILabel *textLabel; UILabel *fakeTextLabel; UILabel *lineLabel1; UILabel *lineLabel2; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup aft
10 2023-11-03
编程技术问答社区
CATextLayer包裹的sizeToFit?
如果我设置了textLayer.wrapped = YES,如何调整textLayer的大小以包含包装的文本?即,我如何获得textLayer>的新高度? 基本上,我想要-[UILabel sizeToFit]. 之类的东西 解决方案 您需要做的第一件事是获取文本的大小. 值得庆幸的是,- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode 将为您提供一个CGSize,然后可以使用它来设置UILabel的框架或您正在使用的UIView的任何子类. 所以,假设textLayer是UILabel - 而不是CALayer - 您最终会得到类似的东西: UIFont *myFont = [UIFont boldSystemFontOfSize:12.0f]; CGSize myFontSi
10 2023-11-03
编程技术问答社区