旧RPG滚动文本,但用(点点点)分解文本块

时间:2014-05-15 06:39:55

标签: ios objective-c

在旧的角色扮演游戏中,对话文本会在屏幕上输入,如果页面上有更多内容,那么就是......并且你按下NEXT继续阅读。< / p>

我已经有很多这方面的工作了。我所坚持的是我需要一个文本块来编程地知道如何使用...来打破页面之间的自我...

通常情况下,简单的方法是在对话框中指定休息时间,但对于这个特定项目,我必须允许它接收大块文本,然后将其分成正确的大小页。

有人对如何做到这一点有任何想法吗?只计算字符不会起作用,因为字体不会是等宽的。

我有一段时间试图寻找这个。找到this,但它没有回答我的问题。

非常感谢!

1 个答案:

答案 0 :(得分:1)

一种解决方案可能是:

  1. 将大文字中的所有单词分成数组
  2. 完成它并根据文本框高度搜索边界
  3. 你可以实现它,例如:

            CGFloat w = 200.0; // RPG textbox width. Get it from actual UI object.
            CGFloat h = 150.0; // RPG textbox height. Get it from actual UI object.
            NSArray *words = [yourRPGtext componentsSeparatedByString:@" "];
            NSString *cur_txt = [words objectAtIndex:0];
            int i = 1;
            RPG_txt_pages = [[NSMutableArray alloc] init];
            while (i < [words count]) {
                NSString *next_txt = [cur_txt stringByAppendingFormat:@" %@",[words objectAtIndex:i]];
    
                CGSize size = [next_txt sizeWithFont:yourRPGtextlable.font
                                        constrainedToSize:CGSizeMake(w, 99999)
                                        lineBreakMode:UILineBreakModeWordWrap];
    
                if (size.height > h) {
                    cur_txt = [cur_txt stringByAppendingString:@"..."];
                    [RPG_txt_pages addObject:cur_txt];
                    cur_txt = [words objectAtIndex:i];
                } else {
                    cur_txt = next_txt;
                }
                i++;
            }
            [RPG_txt_pages addObject:curText];
    

    这里的关键是NSString的sizeWithFont方法:here is the link to the docs.

    IOS7评论:不推荐使用sizeWithFont,您可以使用sizeWithAttributes。 Here is an SO answer on this.

    如果您告诉我使用的IOS版本,我将修改此答案。希望它有所帮助!