向 UITextView 添加轮廓/描边

2024-04-15

我想将轮廓或描边添加到可编辑的UITextView用户键入的文本。就像模因一样:http://t.qkme.me/3oi5rs.jpg http://t.qkme.me/3oi5rs.jpg

我必须使用UITextView因为我需要多线支持。我已经尝试了所有方法并得出了我必须使用的结论CoreText。我几乎使所有解决方案都有效,但陷入了文本视图中文本换行的位置。我的drawRect例行公事中subview of UITextView正确绘制轮廓文本,直到文本换行。即使用户输入的文本被换行,我绘制的轮廓文本也不会换行。这是我的实现drawRect方法 :https://gist.github.com/4498988 https://gist.github.com/4498988。在第 29 行,我正在使用字符包装:

CTLineBreakMode linebreakmode = kCTLineBreakByCharWrapping;

我已经尝试过自动换行选项(这也是默认选项),但没有用。

我的问题是: 如何使绘制的文本正确换行,使其显示为键入文本的轮廓?


// make your UITextView as a subclass of UITextView
// and override -drawRect: method in your UITextView subclass 
- (void)drawRect:(CGRect)rect
{
    self.textColor = [UIColor clearColor];

    [self setTypingAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, _textBaseColor, NSForegroundColorAttributeName, nil ]]; // _textBaseColor is any color of your choice
    CGRect newRect = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetTextDrawingMode(context, kCGTextStroke);
    // Make the thickness of the outline shadow. and increase the y position of shadow rect by 2.
    CGContextSetLineWidth(context, (TEXTOUTLINE_PERCENT/100 * self.font.pointSize)+1); // TEXTOUTLINE_PERCENT can be 25.
    CGContextSetLineJoin(context, kCGLineJoinRound);
    CGContextSetLineCap(context, kCGLineCapButt);
    CGContextSetStrokeColorWithColor(context, [UIColor clearColor].CGColor);
    CGRect shadowrect = newRect;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        shadowrect.origin.y += 0.5;
    }
    else
    {
        shadowrect.origin.y += 2;
    }

    [self.text drawInRect:shadowrect withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, SHADOW_COLOR , NSForegroundColorAttributeName, nil]]; // SHADOW_COLOR can be [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.3]

    // Make the thickness of the outline border of the text.
    CGContextSetLineWidth(context, TEXTOUTLINE_PERCENT/100 * self.font.pointSize); // TEXTOUTLINE_PERCENT can be 25.
    CGContextSetStrokeColorWithColor(context, [[UIColor clearColor] CGColor]);
    [self.text drawInRect:newRect withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, self.textOutlineColor , NSForegroundColorAttributeName,  nil]];

    // Draw filled text. This is the actual text.
    CGContextSetTextDrawingMode(context, kCGTextFill);
    CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
    [self.text drawInRect:newRect withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, _textBaseColor, NSForegroundColorAttributeName,_textBaseColor, NSStrokeColorAttributeName, nil]];
    [super drawRect:rect];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向 UITextView 添加轮廓/描边 的相关文章

  • 在故事板中将 UITableView 的 rowHeight 设置为 UITableViewAutomaticDimension ?

    在 Xcode 6 中创建 iOS 8 应用程序时 如何设置 UITableViewrowHeight to UITableViewAutomaticDimension In WWDC 2014 第 226 场会议 表和集合视图中的新增功能
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 使 iOS 应用程序与 iPhone 6 和 iPhone 6 尺寸兼容 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我创建了一个应用程序 其中使用 xib 进行布局 目前我使用两种不同的 xib 一种用于iPhone4 320 480 一种用于iPh
  • 更改导航项(栏)的背景颜色

    有没有一种简单的方法可以更改视图顶部导航项的背景颜色 我有一个基于导航的应用程序 我只希望一个视图获得另一种背景颜色 我主要使用 IB 创建视图 我找到了以下解决方案 未测试 float r 10 float g 55 float b 13
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • 我们能否检测用户是否通过主页按钮或锁定按钮离开而没有监听 darwin 通知?

    我最近向应用程序商店提交了一个新的二进制文件并将其发送以供审核 但它立即被拒绝并显示以下消息 不支持的操作 不允许应用程序监听设备锁定通知 经过一番挖掘后 我发现我们无法使用 com apple springboard lockstate
  • iOS:滚动视图仅在键盘出现后才起作用

    我制作了滚动视图 其中有很多文本字段 我添加了更新的 TPKeyBoardAvoidingScrollView 并将其添加到滚动视图的文件所有者中 我在 h 文件中添加了插座 在 m 文件中综合并添加了行 self view addSubv
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • 从 Mac 命令行访问 iOS 应用程序目录(沙箱)

    我需要使用 Mac 或 Linux 上的命令行 非 GUI 访问 iOS 设备上安装的应用程序的沙箱目录 这有助于开发和测试自动化 将 json 文件放入沙箱中可以让我设置参数 例如额外的调试消息和更小的刷新间隔 像 iFunBox 这样的
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • NSTimer 不触发选择器

    在带有 ARC 的 ios5 0 中 在我的 rootviewcontroller 中 我调用由应用程序委托持有的安全管理器对象中的方法 在该方法中 我设置计时器如下 NSTimer timer NSTimer scheduledTimer
  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • Objective-C:int值无故改变

    Objective C 我需要帮助保留 int 的值 无需我的命令 它就在我身上发生变化 最初的问题是 如何声明和保留 int 这在另一篇文章中得到了满足 Objective C 如何声明和保留 int https stackoverflo
  • iOS 解决方法:在没有 CSS 属性的情况下平滑滚动 滚动行为:平滑?

    编辑 我找到了一个 jQuery 解决方案 https codepen io chriscoyier pen dpBMVP https codepen io chriscoyier pen dpBMVP这个确实可以在 iOS 上运行 我想
  • 高效创建 x 层深度的嵌套 for 循环

    这可能是一件简单的事情 但我需要创建一个循环结构 使其循环 y x 次以创建 x 和 y 的所有可能组合 例如 如果有 4 个 x 每个 x 有 2 个 y 我想做这样的事情 for int a 0 a lt y a for int b 0
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam

随机推荐

  • 在 wxPython 的面板之间拖动按钮

    有谁知道一个示例 其中展示了如何在 wxPython 中将按钮从一个面板拖动到另一个面板 我在面板中创建了一个位图按钮 我希望能够将其拖到另一个面板并将我放在那里 我还没有找到任何使用按钮的示例 只有文本和文件 我正在使用最新版本的 Pyt
  • Pandas 使用“更大”的 DataFrames 附加性能 concat/append

    问题 我将数据存储在 csv 文件中 其中包含以下列 data id value 我有 15 个文件 每个文件包含大约 10 20mio 行 每个 csv 文件涵盖一个不同的时期 因此时间索引不重叠 但列是重叠的 新 ID 不时输入 旧 I
  • 如何为“转换”状态机定义触发器的枚举?

    作为不相关的后续这个答案 https stackoverflow com a 68269299 913098 它使用以下工作代码 from transitions import Machine from transitions import
  • Eclipse 上下文帮助

    现在我可以在 Eclipse WizardDialog Editor 中注册上下文帮助 1 我创建了一个help contexts xml 文件
  • 如何在animationDidStop委托中识别CAAnimation?

    我遇到了一个问题 我有一系列重叠的 CATransition CAAnimation 序列 所有这些序列我都需要在动画停止时执行自定义操作 但我只想要一个动画DidStop 的委托处理程序 但是 我遇到了一个问题 似乎没有一种方法可以唯一地
  • 在 C# 中以编程方式创建 DHCP 预留

    我被分配的任务是创建一个应用程序 该应用程序接收 MAC 地址并为该 MAC 地址创建 DHCP 保留 NET 中是否有内置的 API 可以轻松完成此任务 当我为基础设施编写应用程序时 Windows 2000 资源工具包中有一个名为 Dh
  • Python,如何在每一行中打印字典键及其值?

    请参阅下图以供参考 gt gt gt for key in d for item in d key print key item 1 2 1 3 2 4 2 5
  • 匿名命名空间:它们真的那么好吗?

    我一直在使用static关键字时间较长 用于定义内部链接 后来 我改用 C 风格 将本地事物包装在匿名命名空间中 然而 现在当我使用匿名命名空间多年后 我开始认为static关键字更容易使用 一个常见的问题是我有这样的模式 namespac
  • 不再支持 Xlsx 文件。设置新的 BW2 项目的解决方案?

    经过几个月的休息后 我本周恢复了 BW2 的计算 由于 XLRD 的更改 我的旧笔记本不再工作 它不再读取 xlsx 如果我理解的话 这个帖子 https exerror com xlrd biffh xlrderror excel xls
  • 为什么在打开连接的情况下会出现“阅读器关闭时调用 HasRows 的尝试无效”?

    我有这个代码 this is managed elsewhere SqlConnection connection connection Open this is one block of code separate from the ab
  • 如何将值参数传递给 Bootstrap 中的 modal.show() 函数

    我有一个页面显示当地咖啡馆的列表 当用户单击某个咖啡馆时 会显示一个模式对话框 其中已预先填写了 咖啡馆名称 该页面包含许多咖啡馆名称 表单应包含他点击的 咖啡馆名称 以下是生成为带有链接按钮的文本的咖啡馆名称列表 table class
  • SQL查询查找同一天安装和卸载应用程序的用户

    我正在尝试使用 Google BigQuery 中 Firebase Analytics 的数据来查找在同一天安装和卸载该应用程序的用户 这就是我到目前为止所得到的 我有一个查询 为我提供安装或卸载应用程序的用户 或 app instanc
  • Flask-WTF - validate_on_submit() 永远不会执行

    我正在使用 Flask WTF 这是我的表格 from flask ext wtf import Form TextField class BookNewForm Form name TextField Name 这是控制器 book ro
  • 如何从另一个视图更新一个视图的 UI [SwiftUI 问题]

    总的来说 我是 Swift 和 iOS 开发的新手 我正在 SwiftUI 中构建一个应用程序 假设不同文件中有 2 个单独的视图 MainView Results 和 TabBar 忽略命名 这只是一个示例 这 2 个视图位于 2 个单独
  • 从绘图中删除线

    只是一个简单的问题 我正在尝试在 R 中绘制图表 并且我已经介绍了如何做到这一点 但是如何删除刚刚创建的线 例如 x lt c 1 2 4 5 6 7 7 8 10 y lt c 40 30 10 20 53 20 10 5 plot x
  • 触发器和数据触发器有什么区别?

    他们看起来是一样的 有显着差异吗 我想我错过了一些东西 一个常规的Trigger仅响应依赖属性 A DataTrigger可以由任何 NET 属性触发 通过设置其Binding财产 但是 它的 setter 仍然可以仅针对依赖属性
  • 如何在协议中声明通用协议属性要求

    挣扎了一段时间 如果你能阐明这一点 那将会非常有帮助 我有一个APIWorkerProtocol它有一个属性要求 所需的属性是一个协议 即DataParserProtocol protocol APIWorkerProtocol var a
  • scala 类型的上限和下限

    考虑以下层次结构 class C1 class C2 extends C1 class C3 extends C2 class C4 extends C3 我想写一个只接受类型的函数C2 and C3 为此我想到了以下几点 def f C
  • Bootstrap 的工具提示在悬停时将表格单元格向右移动一点

    我在我的项目中使用 Bootstrap 3 1 1 我的表格中的每个单元格都包含如下数据000 or 111 悬停时 我想将此数据显示为工具提示 到目前为止 这有效 但是 当我将鼠标悬停在 td 所有相邻单元格向右移动 这是我的 JSFid
  • 向 UITextView 添加轮廓/描边

    我想将轮廓或描边添加到可编辑的UITextView用户键入的文本 就像模因一样 http t qkme me 3oi5rs jpg http t qkme me 3oi5rs jpg 我必须使用UITextView因为我需要多线支持 我已经