有谁有任何示例或资源,我可以在其中找到有关滚动文本的信息,这些文本太长而无法在按钮控件中显示?我正在沿着这些思路思考一些事情。

  • 显示适合当前矩形的尽可能多的文本,末尾带有“...”以表示溢出。
  • 暂停 1 秒钟,然后慢慢将文本滚动到右侧边缘,显示字符串的右侧部分。
  • 显示当前矩形内能容纳的尽可能多的文本,开头带有“...”表示溢出。
  • 整个事情从相反的方向开始。

有没有一种简单的方法可以使用特定移动设备上的“核心”或内置“动画”框架来做到这一点?

编辑]我想添加一些更多细节,因为我认为人们更专注于我试图完成的工作是否适当。该按钮用于提供问答游戏的答案。它不执行任何特定的 UI 功能,但用于显示答案。Apple 自己在 iPod Nano 上的 iQuiz 问答游戏中就这样做了,我认为这是一个非常优雅的解决方案,可以解决比按钮宽度长的答案。

万一它是“...”,那就是其中的困难部分。可以说我删除了这个要求。我可以让按钮的标签为全尺寸,但剪裁到按钮的客户端矩形,并使用一些动画方法在剪裁矩形内滚动它吗?除了省略号之外,这会给我几乎相同的效果。

有帮助吗?

解决方案

这是一个想法:不要使用省略号 (...),而是在每一侧使用渐变,这样多余的文本就会消失在背景颜色中。然后你可以用三个 CALayers 来做到这一点:一个用于文本,两个用于淡入淡出效果。

淡入淡出蒙版只是具有从透明到背景颜色的渐变的矩形。它们应该位于文本层之上。文本将绘制在文本图层上,然后您只需将其以您描述的方式来回滑动动画即可。您可以创建一个描述路径的 CGPath 对象,并将其添加到添加到文本图层的 CAKeyframeAnimation 对象中。

至于你是否认为这“容易”取决于你对 Core Animation 的了解程度,但我认为一旦你学会了 API,你会发现这并不算太糟糕,而且值得这么麻烦。

其他提示

不想变得迟钝,也许你应该重新思考你的问题。按钮应该具有清晰且可预测的功能。它不是存储和显示文本的地方。也许您可以在屏幕上显示说明,并在下面添加一个漂亮的标准按钮?

更新源码示例:

这是一些现成的源代码示例 (实际上是一个完整压缩的 Xcode 项目,包含图像和 nib 文件以及一些源代码),不适用于 iPhone,不使用 Core Animation,仅使用几个简单的 NSImage 和 NSImageView。这只是一个廉价的黑客,它没有实现您请求的全部功能(抱歉,但我不想为您编写源代码:-P),可怕的代码布局(嘿,我只是在一个几分钟,所以你不能指望更好了;-)),这只是一个演示如何做到这一点。也可以使用 Core Animation 来完成,但这种方法更简单。将按钮动画组合到 NSImageView 中并不像子类化 NSView 并直接绘制到其上下文那么好,但它要简单得多(我只是想组合出最简单的解决方案)。一旦它一直滚动到右侧,它也不会向后滚动。因此,您只需要另一种方法来向后滚动并启动另一个 NSTimer,该 NSTimer 在您向左绘制点后 2 秒触发。

只需在 Xcode 中打开项目并点击运行即可,这就是所需要做的全部事情。然后看一下源代码。它确实没有那么复杂(但是,您可能必须先重新格式化它,布局很糟糕)。


由于对我的答案的评论而更新:

如果你根本不使用Apple UI元素,我就看不出这个问题。在这种情况下,你的按钮甚至不是一个按钮,它只是一个可点击的视图(如果你使用 Cocoa 则为 NSView)。您可以将 NSView 子类化为 MyAnswerView 并覆盖 Paint 方法以将您想要的任何内容绘制到视图中。多行文本、滚动文本、3D 文本动画,完全取决于您的想象力。

这是一个例子, ,展示了某人如何子类化 NSView 以创建默认情况下不存在的完整自定义控件。该控件如下所示:

alt text

看到左上角那个有趣的东西了吗?那是一个控制。它的工作原理如下:

alt text


我不想这么说,因为这不能回答你的问题,但是“不要那样做!”。Apple 制定了如何实现用户界面的指南。虽然您可以随意忽略它们,但 Apple 用户习惯于让 UI 遵循这些准则,不遵循这些准则将创建 Apple 用户认为丑陋且缺乏吸引力的应用程序。

以下是 Apple 的人机界面指南

让我引用那里的内容

按钮内容和标签

按钮始终包含文本,它不包含图像。如果您需要在按钮上显示图标或其他图像,请使用“斜角按钮”中描述的斜角按钮。

按下按钮上的标签应为动词或动词短语,描述其执行的动作 - save,close,close,print,print,删除,更改密码等。如果按钮在单个设置上作用,请尽可能明确地标记按钮;例如,“选择图片……”比“选择……”更有帮助,因为按钮会立即采取行动,因此不必在标签中使用“现在”(现在扫描)。

按钮标签应具有标题风格的大写,如“接口元素标签和文本的资本化”中所述。如果按钮立即打开另一个窗口,对话框或应用程序执行其操作,则可以在标签中使用省略号。例如,邮件首选项显示一个包含省略号的按钮,因为它打开了.MAC系统偏好,如图15-8所示。

按钮应包含单个动词或动词短语,而不是问答游戏的答案!如果您有 2 到 5 个答案,则应使用单选按钮让用户选择答案,并使用“确定”按钮让用户接受答案。对于超过 5 个答案,您应该根据指南考虑使用弹出选择器,尽管我认为在这种情况下这会相当难看。

如果答案很长并且需要中断,您可以考虑使用只有一列、每个答案一行且每个单元格都是多行的表格。因此,用户通过单击来选择表格行,这会突出显示表格单元格,然后单击“确定”按钮完成。或者,一旦用户选择任何表格单元格,您就可以直接继续(但这样您就可以让用户有机会纠正意外点击)。另一方面,具有多行单元格的表格在 MacOS X 上相当罕见。iPhone 使用了一些,但通常只有很少的文本(最多两行)。

很确定你不能使用标准 API 来做到这一点,更不用说使用 UILineBreakMode 了。此外,风格指南称省略号表示按下按钮时将询问您更多信息 - 例如打开文件...会询问文件名。您提议使用省略号违反了本准则。

您需要一些自定义逻辑来实现您所描述的行为,但我认为无论如何这都不是可行的方法。

这不是一个很好的 UI 实践,但如果您仍然想这样做,最好的选择是通过样式看起来像按钮的可点击 div 来实现。

将 div 的宽度设置为显式值,并将其溢出设置为隐藏,然后使用按时间间隔执行的脚本来调整该 div 的scrollLeft 属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top