标签: core-text

CoreText映射字符

我有一些触摸处理程序,它响应了一个视图的点击,我已经绘制了一些属性文本.通过这个,我已经到了我有一个CTRunRef(和相关的行)以及数字的点在该运行中的字形.

我无法轻易弄清楚的是,我如何能够获取这些字形,并且,鉴于我的属性字符串,将其映射到字符串中的字符.

具体问题是我想知道用户在视图中点击了什么单词,因此我可以处理该单词是否为URL并触发自定义委托方法,以便我可以使用它打开Web视图.我有所有可能的子字符串,我只是不知道如何映射用户点击特定子字符串的位置.

任何帮助将不胜感激.

更新:我实际上已经完成了另一种方式,根据另一个人的堆栈溢出建议.基本上我所做的就是设置一个自定义属性,@"MyAppLinkAddress"使用我在将字符串转换为属性字符串时找到的URL值.这是在我绘制字符串之前发生的.因此,当敲击事件发生时,我只检查该属性是否存在,如果存在,则调用我的委托方法,如果不存在,则忽略它.这是我现在喜欢的方式,但是我要打开这个问题多了几天,如果有人能拿出答案的话,我很高兴接受它,如果它是一个有效的解决方案,那么其他一些也许能够在将来的某个时候找到这些信息.

iphone ipad core-text

9
推荐指数
1
解决办法
1121
查看次数

什么是Objective-C中Android的"Spannable"

我在iOS应用程序上应该能够突出显示文本,并使其可以点击.

我在iOS中读到了关于NSAttributedString但它仍然比android中的Spannable更复杂.

有没有其他Objective c方法可以做到这一点,如果没有; 我该怎么做NSAttributedString才能逐字逐句地突出显示一个段落,以及如何使我的文字可以点击.

更新:

我究竟想要的是每个单词都应该是可点击的,并且可以 在一个段落中突出显示为单个单词.

objective-c nsattributedstring core-text ios spannablestring

9
推荐指数
1
解决办法
6507
查看次数

缩放文本以适合iPhone

我在制作应用程序中文本的"最佳"方法时遇到了一些麻烦.

我的主视图包含一个文本视图,应用程序的设计决定了一些事情:

  • 文本的(字体)大小应该是动态的
  • 文本框应在视图中垂直居中
  • 连字应该是自动的,并且仅在需要时(如果可能的话,避免使用)

目前我正在使用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 layout text uilabel core-text

8
推荐指数
1
解决办法
2133
查看次数

使用Core Text设置给定字符串范围的背景颜色/突出显示颜色

我在我的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指标来计算触摸是否与链接相交.

iphone highlight nsattributedstring core-text ios

8
推荐指数
1
解决办法
4265
查看次数

为什么使用CoreText绘图与UILabel不同?

我正在使用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版本中的字母更圆.

objective-c core-text ios

8
推荐指数
2
解决办法
2715
查看次数

CATextLayer包裹sizeToFit?

如果我设置textLayer.wrapped = YES,如何调整大小textLayer以包含包装的文本?即,我如何获得新的高度textLayer

基本上,我想要类似的东西-[UILabel sizeToFit].

core-animation uilabel core-text sizetofit catextlayer

8
推荐指数
1
解决办法
1868
查看次数

使用Core Text布置单个字形

我目前正在编写针对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

8
推荐指数
1
解决办法
2176
查看次数

在CoreText中将半行左对齐,右对齐

我正在创建一个销售点(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)

所以我需要一个字符串浮动在左边,其他字符串浮在右边...

iphone objective-c ipad core-text ios

8
推荐指数
1
解决办法
1182
查看次数

如何在CAShapeLayer中添加标签或文本

这是我的课,它会画一个圆圈,它看起来像这样:

在此输入图像描述

    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)

现在我需要在这个圈子的中间添加一个文本,我试图在谷歌上找到它,但没有任何工作正常.我不确定是否可能,如果有可能,有人可以帮助我吗?

calayer cashapelayer core-text ios swift

8
推荐指数
2
解决办法
9053
查看次数

如何在 iOS 中为字符串添加背景颜色和圆角?

如何在 iOS 中为字符串添加背景颜色和圆角?

像下面这张图:

在此处输入图片说明

不能用NSAttributedstring. 那么,我应该使用CoreText吗?我找到了这个答案,但仍然不知道该怎么做。

core-text ios

8
推荐指数
1
解决办法
5981
查看次数