【问题标题】:Generalize and optimize speech bubble logic in Objective-C在 Objective-C 中泛化和优化语音气泡逻辑
【发布时间】:2012-06-29 13:08:26
【问题描述】:

我正在开发一款儿童读物应用程序,并希望为每个场景中的角色对话动态填充对话气泡。我得到了动画和对话的工作,下面是代码。我的书中会有多页,每一页都有多个角色,每个角色都有多个对话。使它成为通用方法的最佳方法是什么,以便我可以重复使用它。我可以将对话存储在 TEXT/XML 文件中,并根据以下参数动态读取和显示它们:页码、字符数、对话数吗?

UIImage *bubble = [[UIImage imageNamed:@"BubbleLefthand.png"] 
                               resizableImageWithCapInsets:UIEdgeInsetsMake(15, 21, 15, 21)];
            UIImageView *imgView = [[[UIImageView alloc] initWithImage:bubble] autorelease];
            imgView.frame = CGRectMake(250, 350, 0, 0);
            UILabel  *xlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
            xlabel.text = @"This is a dialogue text!!!";

            [imgView addSubview:xlabel];
            [self.view addSubview:imgView];
            [UIView animateWithDuration:0.5
                             animations:^(void) {
                                 imgView.frame = CGRectMake(250, 350, 300, -40);
                                 xlabel.frame = CGRectMake(30, 10, 200, 20);
                             } completion:^(BOOL finished) {
                                 STLog(@"ChildrenBookViewController ==> SPPECH BUBBLE ANIMATION COMPLETE. Switch Case: %d", pageNum);
                             }];

目前我的对话显示为附加屏幕截图。

【问题讨论】:

    标签: objective-c ios ios5


    【解决方案1】:

    至于组织对话框,在最高级别按页面组织似乎很好。您可以将背景图片定义为页面的一个属性。

    在页面下方的一级,我认为最好定义“事件”。每个事件对应于用户的一个动作,或者您甚至可以定义一个自动跟随前一个事件的事件。

    在每个事件中,您可以有不同的类型:显示对话、隐藏对话、控制背景音乐、控制音效。

    • 对于显示/隐藏对话事件,应定义对话 id(对话可以直接放在此处或收集在单独的文件中),加上气泡的方向,可能还有尺寸。字符 id 可能没有用,除非您使用它来更改文本气泡或字体的外观。

    • 为了控制背景音乐,您可以有一个属性来指定是播放还是停止当前播放的音乐。播放的背景音乐也可以指定为子节点。

    • 音效方面,可以指定要播放的曲目。

    这是我想到的一些想法,因为我认为该应用程序可以具有哪些功能。如果您提供更多详细信息,我可以提供更多想法。


    关于显示的问题:确保png 文件具有透明的外边缘,并将UIImageView 背景颜色设置为[UIColor clearColor]

    【讨论】:

    • 谢谢。我明白这一点,并会尽快纠正它。您能否为我的问题推荐解决方案?
    • @Alex:更新了文字墙。
    • 谢谢 nhahtdh。从概念上讲,这一切都非常有意义,而且我的应用程序所需要的一切。当您说定义“事件”时,我如何定义“事件”并将不同类型(显示/隐藏对话、声音效果等)与它联系起来?你的意思是定义一个接口/协议?如果您能给我一个伪代码,我将不胜感激。
    • @Alex:在 XML 中,您可以放置​​属性来区分事件。在代码中,您可以为不同类型的事件设置不同的类,但它们可以共享相同的协议(例如 execute())
    • 您好,我已经发布了与以下场景相关的另一个问题,如果您能查看并提供反馈,我们将不胜感激。 stackoverflow.com/questions/11294944/…
    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 2012-06-27
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多