17

我有一个UIImage包含多个图像帧和一个从动画 GIF 文件中切片在一起的持续时间。如果我将图像加载到 a 中UIWebView,它将按预期进行动画处理,但我想使用 aUITextView代替。显而易见的选择是使用带有自定义NSLayoutManger和许多自定义NSAttributedString属性的 TextKit 来实现各种绘图效果。我有一个单曲UITextView,我想给出一个NSAttributedString包含NSTextAttachments 的所有我需要内联显示的图像。它工作正常,除了当我加载其中一个动画UIImages时,它们不会通过它们的帧进行动画处理。关于如何做到这一点的任何想法?我提出了一个理论上的选择:

  1. 为每个动画图像添加自定义属性
  2. 当布局管理器去绘制背景时,迭代这个属性来定位附件的位置。
  3. 回调文本视图以创建UIImageView带有动画图像的 s,添加为子视图,并调用startAnimating

我还没有尝试过,但它相当hacky。我想知道是否有更好的选择。

总而言之:我想在不需要额外对象的情况下为 a UIImageinside a UITextViewvia NSTextAttachmentinside a设置动画。您可以忽略以前使用. 具有用于设置动画帧的属性 ( , ),我目前已配置。如果我将它分配给它动画,如果我将它设置为 a ,则没有动画。NSAttributedStringUIImageViewUIWebViewUIImageimagesdurationUIImageViewNSTextAttachment

我将不胜感激任何反馈。谢谢!

4

1 回答 1

4

我认为这种行为是因为UITextView不使用UIImageView子视图显示附件。当我观察添加和不NSTextAttachment添加 s的视图层次结构时UITextView,我看不到任何新视图(您可以使用 Xcode 中的 View Debugging 或通过说来观察视图层次结构[[[UIApplication sharedApplication] keyWindow] recursiveDescription])。据推测,UITextView只是直接绘制它的附件。

也就是说,我能想到的包含动画附件的一种方法是UIImageView自己创建一个动画作为 的子视图UITextView,将其准确放置在 的NSLayoutManager位置NSTextAttachment,并在 UITextView 滚动时滚动它。您可以通过调用(可能在 中)NSTextAttachment从中获取 的矩形。NSLayoutManagerboundingRectForGlyphRange:inTextContainer:layoutManager:didCompleteLayoutForTextContainer:atEnd:

于 2015-05-07T09:40:45.653 回答