- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用 coretext 绘制一些文本的 View 。一切正常,文本显示在右侧,翻转坐标。但是,我还必须响应特定运行时的触摸,因此我有以下代码,当点击手势识别器触发时会调用它:
- (void)receivedTap:(UITapGestureRecognizer*)recognizer
{
CGPoint point = [recognizer locationInView:self];
NSLog(@"point = %@", NSStringFromCGPoint(point));
CGContextRef context = UIGraphicsGetCurrentContext();
CFArrayRef lines = CTFrameGetLines(textFrame);
CFIndex lineCount = CFArrayGetCount(lines);
CGPoint origins[lineCount];
CTFrameGetLineOrigins(textFrame, CFRangeMake(0, 0), origins);
for(CFIndex idx = 0; idx < lineCount; idx++)
{
CTLineRef line = CFArrayGetValueAtIndex(lines, idx);
CGRect lineBounds = CTLineGetImageBounds(line, context);
lineBounds.origin.y += origins[idx].y;
if(CGRectContainsPoint(lineBounds, point))
{
CFArrayRef runs = CTLineGetGlyphRuns(line);
for(CFIndex j = 0; j < CFArrayGetCount(runs); j++)
{
CTRunRef run = CFArrayGetValueAtIndex(runs, j);
NSDictionary* attributes = (NSDictionary*)CTRunGetAttributes(run);
BOOL result = NO;
NSURL* url = [attributes objectForKey:kJTextViewDataDetectorLinkKey];
NSString* phoneNumber = [attributes objectForKey:kJTextViewDataDetectorPhoneNumberKey];
NSDictionary* addressComponents = [attributes objectForKey:kJTextViewDataDetectorPhoneNumberKey];
if(url)
{
result = [[UIApplication sharedApplication] openURL:url];
return;
}
else if(phoneNumber)
{
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", phoneNumber]];
result = [[UIApplication sharedApplication] openURL:url];
return;
}
else if(addressComponents)
{
NSMutableString* address = [NSMutableString string];
NSString* temp = nil;
if((temp = [addressComponents objectForKey:NSTextCheckingStreetKey]))
[address appendString:temp];
if((temp = [addressComponents objectForKey:NSTextCheckingCityKey]))
[address appendString:[NSString stringWithFormat:@"%@%@", ([address length] > 0) ? @", " : @"", temp]];
if((temp = [addressComponents objectForKey:NSTextCheckingStateKey]))
[address appendString:[NSString stringWithFormat:@"%@%@", ([address length] > 0) ? @", " : @"", temp]];
if((temp = [addressComponents objectForKey:NSTextCheckingZIPKey]))
[address appendString:[NSString stringWithFormat:@" %@", temp]];
if((temp = [addressComponents objectForKey:NSTextCheckingCountryKey]))
[address appendString:[NSString stringWithFormat:@"%@%@", ([address length] > 0) ? @", " : @"", temp]];
NSString* urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
result = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
return;
}
}
}
}
}
这适用于第一行,例如,我正在对其进行一些数据检测的网址。我点击它,然后 Mobile Safari 如我所料启动。但是,这仅在项目位于第一行时才有效。我在其他行看到带有颜色和下划线的文本(例如地址和电话号码),并且我已验证适当的数据已附加到字符串中的自定义属性,但是当我点击它们时,没有任何反应。
我知道我必须以某种方式翻转矩形 lineBounds
,但我不确定该怎么做。任何帮助将不胜感激。
最佳答案
实际上您需要做的是反向迭代行
。例如,尝试替换为以下代码:
NSArray* tempLines = (NSArray*)CTFrameGetLines(textFrame);
CFIndex lineCount = [tempLines count];//CFArrayGetCount(lines);
NSMutableArray* lines = [NSMutableArray arrayWithCapacity:lineCount];
for(id elem in [tempLines reverseObjectEnumerator])
[lines addObject:elem];
CGPoint origins[lineCount];
关于iphone - CoreText 绘图、接收触摸、触摸坐标困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572485/
我在触摸处理程序中有一些,它响应我在其中绘制了一些属性文本的 View 上的点击。通过这个,我已经有了一个 CTRunRef (以及相关的行)以及该运行中的字形数量。 我无法轻松弄清楚的是,如何获取该
我正在使用 CoreText 渲染多列文本。但是,当我将第一段的第一个字母设置为比文本其余部分更大的粗体字体时,我遇到了 2 个问题(均在附图中可见): 第一行下方的间距太大(我理解这是因为第一个字符
我试图按照关于 CoreText 的教程以及如何绘制文本,并在我的 customView 中实现了这个功能。 override func draw(_ rect: CGRect) {
我正在编写一个生成 PDF 的类,我会在完成后发布! 我无法将文本右对齐,使用 CTParagraphStyle,文本总是在左边。这怎么可能?我哪里错了? - (void)addText:(NSStr
我正在绘制一个文本字段,并且已将一个文本字段添加到 UIView 中。文本位于路径内。它绘制正确,但内容从底部开始到顶部结束。有办法解决这个问题吗? 这是我的代码: // Draw text into
CoreText 没有给出属性字符串的正确高度(它短了一行或更多)。我在 SO 上看到很多关于此的帖子,但无法理解或找到解决方案。有人可以解释 Core Text 高度计算的工作原理吗?这是我编写的示
我正在使用 CoreText 并且我想让我的 NSMutableAttributedString 始终居中对齐其文本。这是我正在使用的代码,但它不起作用: CTTextAlignment paragr
我正在寻找有关实现 View 的指南,该 View 在带孔的多边形内呈现 NSAttributedString,包装和重排文本以适合几何形状。这不是 CoreText 的问题,而是将不规则形状划分为有
我使用 CoreText 和 kCTJustifiedTextAlignment 在图像周围 float 一些文本以显示对齐的文本 - 但是图像更大,文本区域更小,空白更少 CoreText 不仅加宽
我在 CoreText 中注意到,在开发我自己的自定义 UITextView 以及查看 Apple 的 SimpleTextInput 时,空格或“”不会当行尾的空间用完时,它不会中断(或移动到下一行
当我实现快速滚动技术时,我正在使用 CoreText 将文本绘制到我的表格 View 单元格中。我的文本中的链接是不同的颜色并且响应点击,但我无法弄清楚如何让链接看起来像是被点击,即点击时改变颜色然后
我正在开发一款新应用。我使用 Core Text 从 NSAttributedString 呈现不同的文档。我在文本呈现中遇到奇怪的故障。并非每个文档都会发生这种情况。它何时出现与不出现似乎没有规律可
我有一个 UIView 的子类,它实现了绘制 CoreText 的代码。在应用程序中,该 UIView 绘制在 UIScrollView 内。这是我目前在 drawRect 中使用的代码:渲染 NSA
我们有一个 iOS 应用程序可以呈现大量文本:http://itunes.apple.com/br/app/biblia-sagrada/id370178518?mt=8 我们使用 CoreText
我正在尝试根据拆分成多个部分的长 NSAttributedString 动态创建书页。 我现在正在做的是将这个类别用于NSAttributedString: @interface NSAttribut
CoreText 是否有任何工具来选择字体的 SmallCaps 变体,或者在字体没有该功能的情况下合成小型大写字母?我在 CoreText 文档中找不到任何关于小型大写字母的内容,尽管有处理字体变化
我使用 CoreText 显示一些文本,创建框架 setter 、框架等,一切都很好。我什至可以格式化文本,但这一切都是在绘制之前完成的。现在让我发疯的问题是: CoreText只是渲染文本?我无法获
我正在尝试使用各种技术获取 MacOS X/iOS 中角色的边界框。我现在展示我所有的尝试。到目前为止,如果我想获取变音符号(例如“Ä”)的大小,代码会失败。 使用CTFontGetBoundingR
我正在尝试使用 CoreText api 呈现字符串。每个字符都在 CAShapeLayer 中呈现,我正在为每个字符获取图层偏移(x 坐标),如下所示: let offset = CTLineGet
我正在使用 CoreText 在灰色背景上绘制黑色文本。系统似乎会自动对字形进行一些混合,我想尽可能禁用此行为,但我不确定如何禁用。 这是字母 L 顶部的放大截图。这是我要禁用的混合 绘图代码如下:
我是一名优秀的程序员,十分优秀!