我有一些触摸处理程序,它响应了一个视图的点击,我已经绘制了一些属性文本.通过这个,我已经到了我有一个CTRunRef(和相关的行)以及数字的点在该运行中的字形.
我无法轻易弄清楚的是,我如何能够获取这些字形,并且,鉴于我的属性字符串,将其映射到字符串中的字符.
具体问题是我想知道用户在视图中点击了什么单词,因此我可以处理该单词是否为URL并触发自定义委托方法,以便我可以使用它打开Web视图.我有所有可能的子字符串,我只是不知道如何映射用户点击特定子字符串的位置.
任何帮助将不胜感激.
更新:我实际上已经完成了另一种方式,根据另一个人的堆栈溢出建议.基本上我所做的就是设置一个自定义属性,@"MyAppLinkAddress"使用我在将字符串转换为属性字符串时找到的URL值.这是在我绘制字符串之前发生的.因此,当敲击事件发生时,我只检查该属性是否存在,如果存在,则调用我的委托方法,如果不存在,则忽略它.这是我现在喜欢的方式,但是我要打开这个问题多了几天,如果有人能拿出答案的话,我很高兴接受它,如果它是一个有效的解决方案,那么其他一些也许能够在将来的某个时候找到这些信息.
我在iOS应用程序上应该能够突出显示文本,并使其可以点击.
我在iOS中读到了关于NSAttributedString但它仍然比android中的Spannable更复杂.
有没有其他Objective c方法可以做到这一点,如果没有; 我该怎么做NSAttributedString才能逐字逐句地突出显示一个段落,以及如何使我的文字可以点击.
更新:
我究竟想要的是每个单词都应该是可点击的,并且可以 在一个段落中突出显示为单个单词.
objective-c nsattributedstring core-text ios spannablestring
我在制作应用程序中文本的"最佳"方法时遇到了一些麻烦.
我的主视图包含一个文本视图,应用程序的设计决定了一些事情:
目前我正在使用UILabel和以下代码来尝试猜测用于文本量的最佳字体大小:
txt = @"this is just some sample text";
mylabel.font = [self getFontForString:txt];
mylabel.adjustsFontSizeToFitWidth = YES;
mylabel.numberOfLines = 0;
[mylabel setText:txt];
Run Code Online (Sandbox Code Playgroud)
和:
- (UIFont *) getFontForString:(NSString *)txt {
CGFloat textLength = txt.length;
CGFloat maxFontSize = 71;
CGFloat minFontSize = 27;
CGFloat newFontSize = 0;
NSArray *chunks = [txt componentsSeparatedByString:@" "];
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO] autorelease];
NSArray *sortedChunks = [chunks sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
CGSize labelSize = theThingLabel.bounds.size;
CGSize projectedSize = [[sortedChunks objectAtIndex:0] sizeWithFont:[UIFont boldSystemFontOfSize:maxFontSize]]; …Run Code Online (Sandbox Code Playgroud) 我在我的iPhone应用程序中使用Core Text布局了一些文本.我正在使用NSAttributedString在给定范围的文本中设置某些样式.
我似乎找不到用于设置背景/高亮颜色的属性,尽管看起来它是可能的.我找不到一个听起来相关的属性名称常量,文档只列出:
kCTCharacterShapeAttributeName
kCTFontAttributeName
kCTKernAttributeName
kCTLigatureAttributeName
kCTForegroundColorAttributeName
kCTForegroundColorFromContextAttributeName
kCTParagraphStyleAttributeName
kCTStrokeWidthAttributeName
kCTStrokeColorAttributeName
kCTSuperscriptAttributeName
kCTUnderlineColorAttributeName
kCTUnderlineStyleAttributeName
kCTVerticalFormsAttributeName
kCTGlyphInfoAttributeName
kCTRunDelegateAttributeName
Run Code Online (Sandbox Code Playgroud)
Twitterrific的开发者Craig Hockenberry在Twitter上公开表示他使用Core Text来呈现推文,Twitterrific有这个背景/亮点,当你触摸链接时我正在讨论.

任何正确方向的帮助或指示都会非常棒,谢谢.
编辑:这里是推文的链接克雷格发布了提到"核心文本,归因于字符串和大量努力工作",以及后续提到使用CTFrameSetter指标来计算触摸是否与链接相交.
我正在使用TTTAttributedLabel(使用CoreText)而不是UILabel来加粗某些部分.它工作得很好,但文字看起来不一样.它看起来像是使用不同的字体.我把它设置为相同的字体(Helvetica),但一个是CTFont,一个是UIFont.为什么他们看起来不一样?
UIFontUILabel的:[UIFont systemFontOfSize:15]CTFont针对CoreText的:CTFontCreateWithName((__bridge CFStringRef)[UIFont systemFontOfSize:15].fontName, 15, NULL)UILabel截图:

CoreText屏幕截图:

"散步"中的"p"和"o"是最容易看到字体看起来不一样的部分.CoreText版本中的字母更圆.
如果我设置textLayer.wrapped = YES,如何调整大小textLayer以包含包装的文本?即,我如何获得新的高度textLayer?
基本上,我想要类似的东西-[UILabel sizeToFit].
我目前正在编写针对iOS 6.1 SDK的应用程序.我知道iOS 7中的某些内容可能无法解决我的问题,但为了学习,我还是会问.
该应用程序将包含一个表视图和自定义表视图单元格.我希望单元格contentView的唯一子视图是使用Core Text绘制的NSAttributedString的自定义视图.由于每个单元格的字符串将不同,因此字形定位需要依赖于字形的数量(即较长的字符串将在字形之间具有较少的可见空间).字体和物理边界的大小必须保持不变,只有字形定位才会不同.
我有以下代码,无论出于何种原因不能达到我的预期.
这是BMPTeamNameView的.h - 自定义视图(contentView的子视图)
@interface BMPTeamNameView : UIView
-(id)initWithFrame:(CGRect)frame text:(NSString *)text textInset:(UIEdgeInsets)insets font:(UIFont *)font;
@property (nonatomic, copy) NSAttributedString *attributedString;
@property (nonatomic, copy) NSString *text;
@property (nonatomic, strong) UIFont *font;
@property (nonatomic, assign) UIEdgeInsets insets;
@end
Run Code Online (Sandbox Code Playgroud)
新的指定初始值设定项现在将设置框架,用于属性字符串的文本,用于确定关于contentView rect的文本rect的插入内容以及要使用的字体.
最初在我的自定义drawRect中:我使用了CTFramesetterRef,但CTFramesetterRef将创建一个不可变的框架(可能有?)限制了各个字形的布局.在这个实现中,我使用CTTypesetterRef来创建CTLineRef.当您比较CTLineDraw()和CTFrameDraw()时,使用CTFrame会导致不同的绘制行为,但这是另一个问题.我的drawRect:如下:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
// Flips the coordinates so that drawing will be right side up
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// Path that will hold the textRect
CGMutablePathRef path …Run Code Online (Sandbox Code Playgroud) objective-c quartz-graphics nsattributedstring core-text ios
我正在创建一个销售点(POS)收据,并且需要具有一定宽度的商品名称,并且需要在右边有一个价格(如float-rightin CSS).
我使用https://github.com/FuerteInternational/FTCoreText来创建内容.任何想法如何实现这一点,而无需创建两个视图并将它们放在彼此之上?
只是为了澄清,我需要这样:
Coffee £1.45
milk, skinny
Danish Pastry £1.75
Coca Cola £1.10
Full English Bfst £12.50
Run Code Online (Sandbox Code Playgroud)
所以我需要一个字符串浮动在左边,其他字符串浮在右边...
这是我的课,它会画一个圆圈,它看起来像这样:
class OvalLayer: CAShapeLayer {
let animationDuration: CFTimeInterval = 0.3
override init() {
super.init()
fillColor = Colors.green.CGColor
path = ovalPathSmall.CGPath
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var ovalPathStart: UIBezierPath {
let path = UIBezierPath(ovalInRect: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
return path
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要在这个圈子的中间添加一个文本,我试图在谷歌上找到它,但没有任何工作正常.我不确定是否可能,如果有可能,有人可以帮助我吗?
core-text ×10
ios ×7
iphone ×4
objective-c ×4
ipad ×2
uilabel ×2
calayer ×1
cashapelayer ×1
catextlayer ×1
highlight ×1
layout ×1
sizetofit ×1
swift ×1
text ×1