如果您根据标题提出这个问题,但对蒙古语不感兴趣,您可能会寻找以下问答:
- Swift:如何旋转 UIButton 和 UILabel 的文本? https://stackoverflow.com/questions/28717634/swift-how-can-you-rotate-text-for-uibutton-and-uilabel
我一直在学习 Swift,以便开发 iOS 应用程序传统蒙古语 http://en.wikipedia.org/wiki/Mongolian_script。问题是传统的蒙古文是从上到下、从左到右垂直书写的。我的问题是如何垂直显示文本并仍然进行换行工作?
如果您耐心听我一分钟,我会尽力更清楚地解释这个问题。下面是我想要实现的文本视图类型的图像。如果外文脚本让您感到困惑,我已经包含了遵循相同模式的英文文本。事实上,如果应用程序有任何英文文本要显示,它应该是这样的。
对于简单的单行 UILabel,顺时针旋转 90 度即可。但是,对于多行 UITextView 我需要处理换行。如果我只是进行简单的 90 度旋转,那么首先写入的内容将出现在最后一行。
到目前为止我已经制定了一个我认为可以解决这个问题的计划:
- 制作一种自定义字体,其中所有字母都垂直镜像。
- 将文本视图顺时针旋转 90 度。
- 水平镜像文本视图。
这应该可以解决文本换行问题。
我可以做镜像字体。但是,我不知道如何对 UITextView 的旋转和镜像进行 Swift 编码。我发现以下链接似乎为解决方案的某些部分提供了提示,但它们都在 Objective C 中,而不是在 Swift 中。
- 如何围绕自己的中心旋转子视图? https://stackoverflow.com/questions/8777199/how-to-rotate-sub-views-around-their-own-centres
- 围绕其中心旋转 UIView 并保持其大小 https://stackoverflow.com/questions/21370728/rotate-uiview-around-its-center-keeping-its-size
- iOS:在屏幕上镜像内容 https://stackoverflow.com/questions/8575064/ios-mirror-content-on-screen
- 镜像 UIView https://stackoverflow.com/questions/8675867/mirroring-uiview
应用程序商店中有传统的蒙古语应用程序(例如this https://itunes.apple.com/us/app/bainu/id946920834?mt=8 and this https://itunes.apple.com/us/app/boljoo/id741637912?mt=8)但我还没有找到任何人分享他们的源代码,所以我不知道他们在幕后做什么来显示文本。我计划将我的代码开源,以便将来其他人为数百万阅读传统蒙古文的人开发应用程序不再那么困难。您能为这项努力提供的任何帮助,不仅是我,而且是蒙古人民,都将非常感激。即使您不了解自己,对这个问题进行投票以使其更加明显也会有所帮助。
Update
@sangonz 的答案仍然是一个很好的答案,但我暂时将其取消标记为已接受的答案,因为我无法让一切正常工作。具体来说:
- 启用滚动(通过将自定义视图嵌入滚动视图或通过子类化 UIScrollView https://stackoverflow.com/questions/30620291/how-to-make-a-vertical-uitextview-by-subclassing-it-from-uiscrollview-in-swift)。在 github 项目中,@sangonz 说这应该很容易,但它不适合我。
- 在方向改变时重新布局(而不是拉伸)字线。我认为通过更多的研究,这个问题应该不难解决。
- 为什么文本行不一直延伸到视图的边缘?底部有一个很大的缺口。
-
How to unlink the NSTextStorage of the custom vertical view from the other UITextView. (see this question https://stackoverflow.com/questions/30796174/how-to-initialize-nstextstorage-with-a-string-in-swift)
到这一点我一直用的是原来的方法 https://stackoverflow.com/questions/30907710/rotating-a-view-in-layoutsubviews我在上面提出了建议,但我真正想要的是得到像 @sangonz 提议的那样的东西。
我现在也在考虑替代方法,例如
-
使用核心文本 https://stackoverflow.com/questions/34221708/should-i-use-text-kit-or-lower-level-text-handling-for-a-vertical-text-view、缺点:感觉像是重新发明轮子
-
使用WebKit https://stackoverflow.com/questions/28544714/how-do-you-make-a-vertical-text-uilabel-and-uitextview-for-ios-in-swift/28694927#comment56465313_28544714,缺点:Apple 不再使用 WebKit
UITextView