Tag: core text

NSAttributedString高度由width和numberOfLines限制

我需要计算不使用UILabel的sizeThatFits方法的自定义标签中的文本矩形。 下面的代码不能正常工作。 主要思想是在index = numberOfLines – 1处查找CTLine,并返回其最大y位置。 但是,结果文本高度有时太大,有时不足以画出最后一行。 – (CGSize)fittingSizeWithSize:(CGSize)size numberOfLines:(NSInteger)numberOfLines { if (numberOfLines == 0) { return [self fittingSizeWithSize:size]; } CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self); if (framesetter == NULL) { return CGSizeZero; } CGPathRef path = CGPathCreateWithRect(CGRectMake(0,0,size.width,size.height), NULL); CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, self.length), path, NULL); NSArray *lines = (NSArray *) CTFrameGetLines(frame); if (lines.count […]

用更多的时间来显示带有自定义字体的NSAttributedstring

我正在使用核心文本明智地显示NSAttributedstring列。 它工作正常。 使用系统字体时,在模拟器和设备中都不会显示任何延迟。 但是使用自定义字体时,会花费更多的时间来显示设备中的内容。 但在模拟器中,结果很快。 – (void)updateAttributedString { // Existing Code if (self.text != nil) { self.attributedString = [[NSMutableAttributedString alloc] initWithString:self.text]; NSRange range = NSMakeRange(0, [self.text length]); // Regarding Fixed font // [ self.attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"TAUN_Elango_Abirami" size:20] range:range];//This is my custom font // Regarding custom Font using below code if (self.font != nil) { […]

如何复制一个NSMutableAttributedString

我只是想知道如何做一个NSMutableAttributedString的副本。 我有一个名为text的属性,我想将它的内容保存在某个点,并在发生某些事情时恢复它。 我试着做一个名为textCopy属性,我可以保存到@property (nonatomic, copy)但我得到一个运行时错误,当我这样做: -[NSConcreteAttributedString insertAttributedString:atIndex:]: unrecognized selector sent to instance. 我将如何做到这一点? 运行时错误更新。 我得到这个随时将NSMutableAttributedString设置为@property (nonatomic, copy) 。 不明白为什么这不起作用,一般来说复制参数似乎无法与NSMutableAttributedString一起使用,无论是否使用其setter方法。

RE:自动旋转,滚动,项目符号,带有属性的string缩进UIScrollView

这是一个很难做的事情,而且由于我的贡献者把它们放在一起很有帮助,公布结果似乎是公平的(下面的答案)。 如果您正在查找涉及iOS和Core Text中的属性string以及滚动的示例,则会在这里进行汇编。 几个额外的点: 包装: 这由属性string的lineBreakMode完成,默认为包装。 您将无法从string中检索软换行符(与NSTextView在string中放置'\ n'字符的Cocoa不同)。 但是你不需要。 您可以依靠Core Text的Framesetter来为您提供给定框架中的string高度,只要您将领先的信息放入属性string即可。 CATextLayer: 与它合作很方便。 所有你需要做的是分配一个属性的string,它包装和绘制。 如果你有一个简短的string显示一个选定的字体,这是伟大的。 但CATextLayer不能识别前导或缩进,所以对于这个项目我直接画到CALayer。 字体: 我坚持CTFontRef的大部分,因为它是需要在iOS中build立一个属性的string,并提供准确的领导,但有时候更容易使用UIFont。 下面是将CTFontRef( fontr )转换为UIFont的一种方法: NSString *sFontName = (NSString *)CTFontCopyName(fontr, kCTFontPostScriptNameKey); UIFont *font = [UIFont fontWithName:sFontName size:CTFontGetSize(fontr)]; CGSize sizeString = [string sizeWithFont:font]; [sFontName release]; 如果您从头开始创buildUIFont,请注意它将接受字体名称的族部分中的空格,或者可以将它们一起粉碎,但“粗体”必须用连字符分隔: self.fontTickerNormal = [UIFont fontWithName:@"Helvetica Neue" size:18.0f]; // OK self.fontTickerIndent = [UIFont fontWithName:@"HelveticaNeue" size:16.0f]; // […]

从ttf文件获取字体

在我的iOS应用程序中,我使用从文件dynamic加载的自定义字体。 要在代码中使用它们,我需要知道加载的字体的家庭。 那么,有没有办法做到这一点? 更新: 我不能硬编码字体系列,导致我的应用程序从服务器加载它。 当然,还有一种方法可以在服务器响应中传递字体系列,但是现在我正在寻找一个不影响服务器的更好的版本(不需要更改它)。

NSAttributedString initWithData:选项:documentAttributes:错误:痛苦地慢

我正在使用这些代码行来从一个简单的HTMLstring中创build一个属性string: NSDictionary *importParams = @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding) }; NSError *error = nil; NSData *stringData = [HTML dataUsingEncoding:NSUTF8StringEncoding] ; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:stringData options:importParams documentAttributes:NULL error:&error]; 问题在于,即使对于很less的字符来说,真的很慢(在模拟器上几秒钟)。 我不明白其背后的原因,我不想使用第三方库与自定义HTMLparsing器。 有没有其他的方式比HTML更快地创buildHTML文本的属性string?

NSLayoutManager boundingRectForGlyphRange由某些点closures

我想在UITextView中“突出显示”特定的单词,而不是用纯色(可能通过NSAttributedString ),而是使用渐变,也许还有一些奇特的效果。 因此,我决定有必要手动创build一个视图,并使用给定文本的边界矩形覆盖(或底层)。 令我惊讶的是,这竟然是相当简单的。 例子是在UIViewController里面, txtView是一个UITextView作为IBOutlet连接: override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // Converting to NSString as I need a NSRange for glphyRangeForCharacterRange // (a normal String in Swift returns a Range) let charRange = (txtView.text as NSString).rangeOfString("dolor sit er elit") assert(charRange.location != NSNotFound, "Character Range could not be found.") let glyphRange = txtView.layoutManager.glyphRangeForCharacterRange(charRange, actualCharacterRange: nil) […]

NSForegroundColorAttributeName不适用于UILabel

我有一个问题,使用“NSForegroundColorAttributeName”更改子string的颜色。 我很困惑,因为同一个子string的其他属性被应用(下划线)。 还尝试使用不推荐的属性“UITextAttributeTextColor”和其他build议的属性“kCTForegroundColorAttributeName”,并获得相同的效果。 我正在编译iOS 7。 NSString *freeText = [NSString stringWithFormat:@"(%@)", self.me.activity.text]; int lblMaxWidth = arrImgView.origin.x – WPRConstraints.BorderOffset; int lblMaxHeight = self.activityView.size.height – WPRConstraints.BorderOffset * 2; RevUILabel *addActivityLbl = [[RevUILabel alloc] initWithFontNameMultiLine:[WPRFonts LattoBold] size:16 sizeConstrain:CGSizeMake(lblMaxWidth,lblMaxHeight)]; addActivityLbl.text = [NSString stringWithFormat:@"%@ %@", Translate(self.me.activity.activityKey), freeText] ; addActivityLbl.textColor = BlackColor; NSMutableAttributedString *str = [addActivityLbl.attributedText mutableCopy]; [str addAttribute:NSUnderlineColorAttributeName value:[UIColor redColor] range:[addActivityLbl.text […]

向UITextView添加大纲/描边

我想为用户键入的可编辑的UITextView文本添加一个大纲或描边。 完全像memes: http : //t.qkme.me/3oi5rs.jpg 我必须使用UITextView因为我需要多行支持。 我已经尝试了所有的方法,并得出了我必须使用CoreText的结论。 我得到了几乎所有的解决scheme工作,但卡在文本视图中的文本包装点。 我在UITextView的subview的drawRect例程正确地绘制轮廓文本,直到文本换行。 即使当文本用户input被包装,我绘制的大纲文本不。 这是我的drawRect方法的实现: https : //gist.github.com/4498988 。 在第29行,我正在使用char封装: CTLineBreakMode linebreakmode = kCTLineBreakByCharWrapping; 我已经尝试了wordwrapping选项(这也是默认的),没有用。 我的问题是:如何获取我正确绘制的文本,使其显示为input文本的轮廓?

如何改变UITextView中的单词的颜色?

是否有可能改变UITextView的颜色在特定的范围或特定的单词? 如果一个单词在一个视图中多次出现,则更改该单词的颜色。