如何通过在Swift中从UIScrollViewinheritanceUITextView来制作垂直UITextView?

背景

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

在这里输入图像说明

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

在前面的问题中,我提出了一个镜像字体和UITextView的旋转和镜像的组合(因为这是我在Android中所做的)。 然而,在阅读了这个答案并对iOS做事方式(比如使用TextKit )做了进一步的研究后,我认为从头开始创build像UIVerticalTextView这样的东西可能会更好,而不是像普通的UITextView 。 而且由于我从UIScrollView中看到UITextView inheirits ,我假设我应该UIVerticalTextView UIScrollView来创buildUIVerticalTextView

我现在在哪里

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

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

  • NSTextStorage – 这不应该有任何不同。 它将只存储蒙古的Unicode文本和任何样式信息。
  • NSTextContainer – 高度和宽度需要切换为垂直文本容器大小。 (无论如何,我认为是这样,除非在其他地方可以这样做)。
  • 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 } 

更新

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

  • 如何从头开始制作UITextView?
  • 如何在Swift中用string初始化NSTextStorage

并尝试一种不同的方法:

  • 旋转视图与自动布局兼容?
  • 在layoutSubviews中旋转视图这实际上现在有一个工作解决scheme。 但是,它基本上是把三个视图堆叠在一起。 我仍然喜欢使用TextKit自定义的UIScrollView子类,就像我在当前的问题中提出的那样。

如果你有一个字体显示你的文字,最简单的方法是使用正常的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现在将滚动到右侧不下来,我认为应该发生在蒙古?