如何通过在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
现在将滚动到右侧不下来,我认为应该发生在蒙古?