17

背景

我是 iOS 开发的新手,但为了开始使用垂直蒙古文脚本制作最基本的应用程序,我需要一个垂直的UITextView. 我还没有找到任何其他蒙古应用程序开发人员共享他们的代码,所以我正在尝试自己制作。蒙古语从上到下书写,从左到右换行,如下图所示:

在此处输入图像描述

滚动应该是水平的(从左到右)。

上一个问题中,我提出了一个镜像字体与旋转和镜像的组合UITextView(因为这是我在 Android 中所做的)。但是,在阅读了这个答案并进一步研究了 iOS 的做事方式(比如使用TextKit)之后,我认为UIVerticalTextView从头开始创建类似的东西而不是弄乱正常的UITextView. 而且由于我看到UITextViewUIScrollView的继承,我认为我应该继承子类UIScrollView来制作UIVerticalTextView.

我现在在哪里

我上面提到的答案是子类UIView,但我在滚动工作时遇到了很多麻烦。这是我想要子类化的另一个原因UIScrollView。此外,当方向发生变化时,该解决方案也没有重新排列每行中的单词。

我收集了以下部分,但我不知道如何将它们放在一起:

  • NSTextStorage - 这不应该有什么不同。它只会存储蒙古语 Unicode 文本和任何样式信息。
  • NSTextContainer - 需要切换高度和宽度以提供垂直文本容器大小。(无论如何,我认为是这样。除非这可以在其他地方完成。)
  • NSLayoutManager - 这里有什么特别需要做的,还是由 NSLayoutManager 处理的UIVerticalTextView
  • UIVerticalTextView - 这将是一个子类,UIScrollView但需要添加和/或覆盖哪些方法?

    class UIVerticalTextView: UIScrollView {
    
        // Which properties to include?
        //     - TextStorage
        //     - TextContainer
        //     - LayoutManager
    
        // which methods to override?
    
        // which methods to add to give minimal functionality like UITextView?
        //     - init
        //     = text
    }
    

更新

这些问题试图将问题分解成更小的部分:

并尝试使用不同的方法:

4

1 回答 1

5

如果您有一种显示文本的字体,最简单的方法是使用普通的 UITextView:

UITextView *textView = [[UITextView] alloc] init];

textView.transform = CGAffineTransformMakeRotation(-M_PI/2);

textView.text = @"YOUR TEXT HERE";

[textView setBaseWritingDirection:UITextWritingDirectionRightToLeft forRange:[textView textRangeFromPosition:[textView beginningOfDocument] toPosition:[textView endOfDocument]]];

现在textView将向右滚动而不是向下滚动,我认为这应该发生在蒙古语中?

于 2015-06-03T12:49:32.613 回答