gpt4 book ai didi

iphone - 这是 CoreText 吗? - 鸟舍文本捏缩放展开

转载 作者:可可西里 更新时间:2023-11-01 03:49:32 28 4
gpt4 key购买 nike

我正在研究制作一个用户可以更改 UITextField 的大小和方向的应用程序。我正在研究 Aviary 应用程序,我看到用户不仅可以增加或减少文本的大小,还可以更改其方向。

enter image description here

所以我想问的问题是

1) 他们是否使用 CoreText 来执行此操作?他们是否只使用普通的旧 UILabelUIText

2) 我不知道你如何动态调整大小?他们在使用 UIView 吗?

3) 我用谷歌搜索了 CoreText 教程、示例、检查了 apple 文档和示例项目,查看了 cocoa 控件和 github,但我仍然没有看到任何示例代码或教程来说明这是如何完成的。

有没有人愿意给我指明方向或教程?

最佳答案

关于字体的外观,有几个选项:

  1. 您可以使用标准的 UILabel 来实现您在此处看到的大部分效果(字体、大小、颜色、旋转)。超出标准 UILabel 的一项功能是字体周围的白色描边。但是,从 iOS 6 开始,您还可以使用标准 UILabel 使用其 attributedText 实现红色文本周围的白色描边效果。属性,这是一个 NSAttributedString .

  2. 在 6.0 之前的 iOS 版本中,要实现文本周围的白色描边颜色,您必须使用 CoreGraphicsCoreText .

关于文本的动态调整大小、旋转和移动,他们无疑只是使用调整 View 的 transform 属性的手势识别器(更准确地说,可能是调整 transform 用于旋转,调整 centerframe 用于拖动,调整 frame 和字体大小以调整大小(如果您只使用scale 转换,你最终可能会出现不希望的像素化)。

如果您在 Stack Overflow 中搜索有关手势识别器以及 View 的拖动、调整大小和旋转的问题,您将获得相当多的成功。


在 iOS 6 中,如果你想要带有 UILabel 的白色边框的红色文本,你可以这样做:

// create attributes dictionary

NSDictionary *attributes = @{
NSFontAttributeName : [UIFont systemFontOfSize:48.0],
NSForegroundColorAttributeName : [UIColor redColor],
NSStrokeColorAttributeName : [UIColor whiteColor],
NSStrokeWidthAttributeName : @(-3)
};

// make the attributed string

NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:@"bigcat"
attributes:attributes];

self.label.attributedText = stringToDraw;

有关 iOS 中属性字符串的信息,请参阅:


如果您需要支持 iOS 6 之前的 iOS 版本,则必须使用 CoreText 或 CoreGraphics。 CoreText 再现可能如下所示:

- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];

if (!self.text)
return;

// create a font

CTFontRef sysUIFont = CTFontCreateUIFontForLanguage(kCTFontSystemFontType, self.fontSize, NULL);

// create attributes dictionary

NSDictionary *attributes = @{
(__bridge id)kCTFontAttributeName : (__bridge id)sysUIFont,
(__bridge id)kCTForegroundColorAttributeName : (__bridge id)[self.fillColor CGColor],
(__bridge id)kCTStrokeColorAttributeName : (__bridge id)[self.borderColor CGColor],
(__bridge id)kCTStrokeWidthAttributeName : @(-3)
};

// make the attributed string

NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:self.text
attributes:attributes];

// begin drawing

CGContextRef context = UIGraphicsGetCurrentContext();

// flip the coordinate system

CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

// create CTLineRef

CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)stringToDraw);

// figure out the size (which we'll use to center it)

CGFloat ascent;
CGFloat descent;
CGFloat width = CTLineGetTypographicBounds(line, &ascent, &descent, NULL);
CGFloat height = ascent + descent;
CGSize stringSize = CGSizeMake(width, height);

// draw it

CGContextSetTextPosition(context,
(self.bounds.size.width - stringSize.width) / 2.0,
(self.bounds.size.height - stringSize.height + descent) / 2.0);
CTLineDraw(line, context);

// clean up

CFRelease(line);
CFRelease(sysUIFont);
}

可以在我的 GitHub CoreText Demonstration 中找到上述内容的更完整实现。 .


这是 drawRect 的一个非常简单的 Core Graphics 实现,它在文本周围写入带有轮廓的文本:

@implementation CustomView

- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];

if (!self.text)
return;

// begin drawing

CGContextRef context = UIGraphicsGetCurrentContext();

// flip the coordinate system

CGContextSetTextMatrix(context, CGAffineTransformMakeRotation(M_PI_4 / 2.0));
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

// write the text

CGContextSelectFont (context, "Helvetica", self.fontSize, kCGEncodingMacRoman);
CGContextSetTextDrawingMode (context, kCGTextFillStroke);
CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGContextSetLineWidth(context, 1.5);
CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextShowTextAtPoint (context, 40, 100, [self.text UTF8String], [self.text length]);
}

@end

关于iphone - 这是 CoreText 吗? - 鸟舍文本捏缩放展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16038304/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com