这是核心文本吗? - Aviary 文本捏合缩放展开

2024-01-19

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

所以我想问的问题是

1)他们是否使用CoreText为了做到这一点,他们只是使用普通的旧UILabel or UIText?

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

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

有人愿意为我指出某个方向或教程吗?


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

  1. 您可以使用标准UILabel实现您在此处看到的大部分效果(字体、大小、颜色、旋转)。超越标准的一项功能UILabel是字体周围的白色笔划。但是,有效的iOS 6,你也可以用标准的方式实现红色文字周围白色描边的效果UILabel使用它的attributedText http://developer.apple.com/library/ios/documentation/uikit/reference/UILabel_Class/Reference/UILabel.html#//apple_ref/doc/uid/TP40006797-CH3-SW55属性,这是一个NSAttributedString https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/Reference/Reference.html.

  2. 在 6.0 之前的 iOS 版本中,要实现文本周围的白色描边颜色,您必须使用核心图形 http://developer.apple.com/library/ios/#documentation/CoreGraphics/Reference/CoreGraphics_Framework/_index.html or CoreText https://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html.

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

如果您在 Stack Overflow 上搜索有关手势识别器以及视图拖动、调整大小和旋转的问题,您会得到很多不错的结果。


在 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 中属性字符串的信息,请参阅:

  • WWDC 2012 - #222 - iOS 属性字符串简介 https://developer.apple.com/videos/wwdc/2012/?id=222

  • WWDC 2012 - #230 - iOS 的高级属性字符串 https://developer.apple.com/videos/wwdc/2012/?id=230


如果您需要支持 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 演示 https://github.com/robertmryan/CoreText-Demonstration.


这是一个非常简单的 Core Graphics 实现drawRect编写文本并在文本周围添加轮廓:

@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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这是核心文本吗? - Aviary 文本捏合缩放展开 的相关文章

  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们
  • 核心数据 NSFetchRequest 还获取实体的子对象

    我是 iOS 开发和 Core Data 的新手 我有一个父 NSManagedObject class Units interface Properties NSManagedObject property nonatomic retai
  • 在 iOS5 中使用 UISegmentedControl 切换 ViewController

    我正在尝试一些非常简单的事情 但不知何故我无法让它发挥作用 我尝试做的就是使用 UISegmentedControl 在 2 个视图控制器之间切换 就像您可以在 App Store 应用程序的 突出显示 选项卡中看到的那样 我正在使用 iO
  • 我可以更改键盘方向吗?

    例如我用这段代码关闭自动旋转 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation return NO BOOL sh
  • 使用 Simulator 时 Xcode 10 中的屏幕截图尺寸错误

    我正在尝试使用 Xcode 10 模拟器为 iTunes 制作屏幕截图 但图像大小错误 我读过Debug gt Optimize Rendering for Window Scale会有帮助 但在 Xcode 中没有这样的选项 有人有这个问
  • 在不同的捆绑包上测试 iPhone 应用内购买?

    我们有一组 iPhone 应用程序的 Beta 测试人员 最近 我们在应用程序中添加了应用内购买功能 在此之前 我们会使用单独的捆绑 ID 和名称向 Beta 测试人员发送临时版本 以便他们可以在手机上拥有商店版本和临时版本 然而 似乎我们
  • 奇怪的 UITableView 插入/删除行动画

    在带有动画 UITableView RowAnimationTop 的 UITableView 中插入 删除 UITableViewCell 时 我看到了奇怪的效果 当要插入的单元格比上面的单元格大得多时 就会发生动画故障 显示模拟器中的故
  • Xcode 无法找到 strip-frameworks.sh 目录

    我最近将 Xcode 更新到版本 7 1 其中包括 Swift 2 1 我安装了 Swift 2 1 没有遇到任何问题 在尝试运行我的项目后 我意识到我需要获取最新版本的 Realm 因为之前的版本不支持 Swift 2 1 我删除了旧框架
  • Objective-C中如何使继承的类能够看到父类的隐藏方法[重复]

    这个问题在这里已经有答案了 我有两个类 Class1 和 Class2 第二个类继承自第一个类 我需要重写 Class1 的 update 方法来实现我的目标 继承方法中 update方法的改变是在代码中间进行的 所以我不能使用 超级更新
  • 如何使用MKMapView完成加载委托,可能的“完成显示”委托?

    当用户在选择注释后点击 保存 时 我尝试保存地图视图的缩略图 当用户尚未放大该注释时会出现问题 因此尚未加载关闭缩放级别 这就是用户点击保存后我正在做的事情 将布尔值 saving 设置为 true 居中并放大注释 无动画 当调用mapVi
  • 如何在 Xcode 4 中在 .h 和 .m 之间切换

    刚刚安装的 Xcode 4 到目前为止一切顺利 除了 Apple 更改了所有键盘快捷键 有人知道如何在 h 和 m 之间切换吗 苹果改变了各种快捷键 但要在标头和实现之间切换 新的快捷键是 You can change it back to
  • Swift 闭包作为 AnyObject

    我尝试使用这个方法 class addMethod 在 Obj c 中使用如下 class addMethod self class selector eventHandler imp implementationWithBlock han
  • (Ionic 2)尝试回退到 Cordova-lib 执行时发生错误:TypeError:无法读取未定义的属性“then”

    Edit 使用 ionic 2 时会发生这种情况 我知道它还不稳定 但我认为可能有一些解决方案 因为其他人似乎没有遇到这个问题 Edit end 由于某种原因 我在尝试使用 ionic build android 和 ionic build
  • 两者都实现了类。将使用两者之一

    我有一个项目 它具有使用 SocketRocket 的依赖项 通过 CocoaPods 安装 并从 HeapAnalytics 导入了静态库 显然 HeapAnalytics 库已经使用了 SocketRocket 编译时没有出现错误 但在
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • 如何在 ios 7 上更改重新排序控制图像

    我正在寻找一种更改重新排序控件图像和大小的方法 我使用此代码来更改重新排序图像 void tableView UITableView tableView willDisplayCell UITableViewCell cell forRow
  • 尝试复制文件时出错

    我正在尝试使用 NSFileManager 将临时文件复制到另一个位置 但是它失败并抱怨其中一个文件不存在 Copy temp file NSError error BOOL exists fileManager fileExistsAtP
  • 私人 iPhone 应用程序?

    我有兴趣编写连接到内部网或外部网的应用程序 换句话说 我想为我的客户制作私人应用程序 但我不希望每个人都能够访问它并能够下载它 您知道是否有一种方法可以将企业应用程序仅分发给特定的人 Android 也做同样的事情吗 The iPhone
  • iOS - NSNotificationCenter 多个UIKeyboard通知

    我有两个视图控制器 我们称它们为 A 和 B 1 在 A 中 我显示一个包含文本字段的 popOver 2 B中有一个UITextView用于简单的文本编辑 我必须管理 A 和 B 中的键盘才能滚动键盘隐藏的内容 我知道如何重新定位内容 我
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项

随机推荐

  • 如何限制用户 SSH 访问某些文件夹

    目前 我们正在进行的项目有一名自由前端开发人员参与 由于我们以前从未使用过他 因此我们正在寻找一种方法来限制他对我们的服务器和文件的访问 但同时让他修改这些服务器上当前的视图文件 当前项目 全部在一台服务器上 被划分为 6 个独立的迷你站点
  • VS2010:自动生成的 XML 文档文件不更新

    我在vs2010中有一个C 项目 生成一个XML文档文件 我已将生成文件的输出路径设置为项目输出路径 我的问题是 当文档文件的路径与项目输出路径相同并且文件名相同 文件扩展名除外 时 文件不会更新 Does not更新 XML 文件 C M
  • 使两个脚本进行通信

    我必须使两个程序 例如 脚本 A py 和 脚本 B exe 进行通信 两个程序都处于无限循环中 脚本 A 需要写入脚本 B 的 stdin 然后读取脚本 B 的 stdout 然后再次写入 等等 脚本 B 我无法更改 这两个文件都在我的硬
  • 减少 C++ 代码大小

    我正在研究一种用于微控制器的动态语言 编译为 C 作为一名 CS 人员 我决定首先正确地完成它 然后再担心优化 以下是我的对象系统的结构 Base Interface Number Interface Int Float Char Sequ
  • Android:方向更改会擦除对我的 ImageView 所做的修改

    我有一个应用程序 其中有 ImageView 我打开新的活动 用手指画一些东西 这个位图返回到我的 ImageView 一切都很好 但是当我现在改变方向时 我的 ImageView 活动会重新绘制或重新启动 并且 imageview 为空
  • 是否可以在 WPF ScrollViewer 上调整鼠标滚轮滚动距离?

    我发现使用鼠标滚轮时滚动太多 我有一个很短的ScrollViewer 一行高 包含几行项目WrapPanel 并且它会在一个 刻度 内向右滚动到底部 以便中间的线永远不可见 这不是一个很好的解决方案 但您可以添加一些带有文本的窗格 每行一个
  • iOS 7 上的合并冲突

    我已经更新了我的应用程序以支持 iOS 7 并且遇到了以下问题 在我的某个屏幕上 context save 我收到以下错误 NSCocoaErrorDomain Code 133020 The operation couldn t be c
  • iOS 10:NSInvalidLayoutConstraintException:约束不正确地关联不兼容类型的锚点

    更新到 iOS 10 后 我在我的一个应用程序上多次遇到此错误 NSInvalidLayoutConstraintException 约束不正确关联 不兼容类型的锚点
  • 将 System.Data.SqlClient 升级到版本 4.5.0-preview2 后,Dapper 引发 System.Data.SqlClient.SqlConnection 异常

    我最近将我的一个 ASP NET Core 应用程序从 net461 应用程序升级到 ASP NET Core 2 0 应用程序 因为过去唯一阻碍我的是 System Transactions 现在受支持 升级后 访问任何使用以下内容的函数
  • 是否有任何 Azure 数据工厂活动来获取 Cosmos 集合列表?

    Azure 数据工厂中是否有任何选项可以了解 Azure cosmos 帐户中特定数据库中可用的集合列表 想要执行特定的活动 每次执行 Azure 数据工厂管道时 该活动都会返回 cosmos db 中的集合列表 具体要求 想要从 cosm
  • 通用数据库表

    以下数据库表设计有名称吗 基本上我们有代表键 值对的通用列 编号 k1 v1 k2 v2 k3 v3 1 名称 萨姆 姓氏 史密斯 空 空 在我的应用程序中 我有许多只有一行的表 我想将它们合并到一个具有 X 列的通用表中 每行代表单个表行
  • iOS drawInRect:attributes 执行多行文本截断

    如何在尾部截断的矩形中绘制长文本字符串 我尝试将 drawInRect withAttributes 与 NSLineBreakByTruncatingTail 段落样式一起使用 但它总是在单行上呈现文本 它仅使用 NSLineBreakB
  • 使用 docker 设置 Wordpress 时的卷挂载

    快速入门 Compose 和 WordPress https docs docker com compose wordpress 提出以下建议docker compose yml version 3 3 services db image
  • 将 Tomcat Basic Auth 与新的 WebApplicationInitializer 结合使用

    好的 我以前曾在经典的 web xml 中使用过这种技术 但现在我使用 WebApplicationInitializer 时遇到了让它工作的问题 我的 WebApplicationInitializer 包含以下代码 HttpConstr
  • 跨环境管理配置文件

    您 您的公司 如何管理您构建的应用程序 系统的配置文件 让我告诉你我们是如何做到的 以及问题是什么 我在一家开发软件的公司工作 该公司约有 15 名开发人员 我们构建部署在我们的托管托管提供商处的业务线 Web 应用程序 我们的主要应用程序
  • 如何在手机中仅启用纵向和反向纵向,“sensorPortrait”在手机上不起作用?

    我不明白为什么在活动的清单中设置 sensorPortrait 属性不能让活动进入反向纵向 这就是我在清单中设置的方式
  • 嵌套/子 TransactionScope 回滚

    我试图像在 SQL Server 中嵌套事务一样嵌套 TransactionScopes net 4 0 但看起来它们的操作方式不同 我希望我的子事务在失败时能够回滚 但允许父事务决定是否提交 回滚整个操作 问题是当第一次完成时 事务会回滚
  • 使用 jQuery 设置文本选择颜色。演示无法运行

    http jsfiddle net uKdPM http jsfiddle net uKdPM 我已经设置了 selectioncss中的颜色 因此当您突出显示屏幕上的文本时 文本的颜色是粉红色的 我现在尝试在页面加载时通过 jQuery
  • 为什么我不应该总是使用shared_ptr和unique_ptr而应该使用普通指针?

    我有以下背景C and obj c所以 RC GC 是我 仍然 珍视的东西 当我开始学习时C 更深入地说 我不停地想知道为什么我会使用普通指针 当它们如此时不受管理的而不是其他替代解决方案 the 共享指针提供了一种存储引用的好方法 并且在
  • 这是核心文本吗? - Aviary 文本捏合缩放展开

    我正在考虑制作一个应用程序 用户可以更改其大小和方向UITextField 我正在研究 Aviary 应用程序 我发现用户不仅可以增加或减小文本的大小 还可以更改其方向 所以我想问的问题是 1 他们是否使用CoreText为了做到这一点 他