Tag: mongolian vertical script

如何在Swift中为iOS创build垂直文本UILabel和UITextView?

如果你根据标题来到这个问题上,但是对蒙古人不感兴趣,你可能会在寻找这个问答: Swift:如何为UIButton和UILabel旋转文本? 我一直在学习Swift,以便为传统的蒙古语开发iOS应用程序。 问题是传统的蒙古文是从上到下,从左到右的垂直书写。 我的问题是如何垂直显示文本,仍然有线包装工作? 如果你留在我身边一会儿,我会试着更清楚地解释这个问题。 下面是我想要实现的那种文本视图的图像。 如果外文脚本丢掉了,我已经包含了遵循相同模式的英文文本。 事实上,如果应用程序有任何英文文本显示,这是它应该看起来。 对于一个简单的单线UILabel,90度顺时针旋转将起作用。 但是,对于多行UITextView,我需要处理换行。 如果我只是做一个简单的90度旋转,写的第一件事就会落在最后一行。 到目前为止,我已经制定了一个计划来解决这个问题: 制作所有字母垂直镜像的自定义字体。 顺时针旋转文本视图90度。 水平镜像文本视图。 这应该照顾文本换行。 我可以做镜像字体。 但是,我不知道如何做UITextView的旋转和镜像的Swift编码。 我发现下面的链接似乎给解决scheme的一部分提示,但是它们都在Objective C中,而不是在Swift中。 如何旋转他们自己的中心周围的子视图? 围绕其中心旋转UIView保持其大小 iOS:在屏幕上镜像内容 镜像UIView 在app store里有传统的蒙古应用程序(比如这个和这个 ),但是我还没有find任何人分享他们的源代码,所以我不知道他们在幕后做了什么来显示文本。 我打算让自己的代码是开源的,这样对于其他人来说,为了阅读传统蒙古语的数百万人开发应用程序并不难。 任何援助,你可以给这个努力,将不胜感激,不仅由我,而且蒙古人民。 即使你不了解自己,提出这个问题,使其更明显将有所帮助。 更新 @ sangonz的答案仍然是一个很好的答案,但是我暂时没有把它作为被接受的答案,因为我不能让所有的东西都起作用。 特别: 启用滚动(通过在滚动视图中embedded自定义视图或通过inheritanceUIScrollView )。 在github项目中,@sangonz说这应该很容易,但这不适合我。 根据方向更改获得重新布局(而不是拉伸)字线。 我觉得这应该不是太难以解决多一点研究。 为什么文本行不能一直走到视图的边缘呢? 底部有一个很大的差距。 如何从另一个UITextView中断开自定义垂直视图的NSTextStorage。 (看这个问题 ) 到目前为止, 我一直在使用我上面提出的原始方法 ,但是我真正想要的是像@sangonz提出的那样工作。 我现在也在考虑类似的替代方法 使用核心文本 ,缺点:感觉就像重新发明轮子 使用WebKit ,缺点:Apple不再为他们的UITextView使用WebKit

在Swift中使用Unicode代码点

如果您对蒙古语的细节不感兴趣,但只想快速回答在Swift中使用和转换Unicode值,则跳至接受答案的第一部分。 背景 我想为iOS应用程序使用传统蒙古文的Unicode文本。 更好的和长期的解决scheme是使用AAT智能字体来渲染这个复杂的脚本。 ( 这样的字体确实存在,但是他们的许可证不允许修改和非个人使用)。但是,由于我从来没有制作字体,更不用说所有的AAT字体的渲染逻辑,我只是​​打算自己做渲染斯威夫特现在。 也许在稍后的日子,我可以学会做一个聪明的字体。 外部我将使用Unicode文本,但在内部(用于在UITextView显示)我将Unicode转换为以哑巴字体(使用Unicode PUA值编码)存储的单个字形。 因此,我的渲染引擎需要将蒙古Unicode值(范围:U + 1820到U + 1842)转换为存储在PUA中的字形值(范围:U + E360到U + E5CF)。 无论如何,这是我的计划,因为这是我过去在Java中所做的 ,但也许我需要改变我的整个思维方式。 例 下面的图片显示su在蒙古语中用两种不同的forms写在字母u (红色)上。 (蒙古语是垂直书写的,英文中的草书字母连在一起。 在Unicode中,这两个string将被表示为 var suForm1: String = "\u{1830}\u{1826}" var suForm2: String = "\u{1830}\u{1826}\u{180B}" suForm2的自由variablesselect器(U + 180B)被Swift String识别(正确)为与之前的u (U + 1826)相同的单位。 斯威夫特认为它是一个单一的字符,一个扩展的字形组合。 但是,为了自己进行渲染,我需要将u (U + 1826)和FVS1(U + 180B)区分为两个不同的UTF-16编码点。 为了内部显示的目的,我会把上面的Unicodestring转换成下面的渲染字形string: suForm1 = "\u{E46F}\u{E3BA}" suForm2 = […]