使用TextKit在UITextView中animationUIImage

我有一个UIImage包含多个图像帧和持续时间从一个animation的GIF文件一起切片。 如果我在UIWebView加载图像,它将按预期animation,但是我想用UITextView代替。 显然的select是使用TextKit自定义NSLayoutManger和许多自定义NSAttributedString属性来实现各种绘图效果。 我有一个单一的UITextView ,我想给NSAttributedString包含NSTextAttachment所有的图像,我需要内联显示。 它工作得很好,除了当我加载这些animationUIImages ,他们不通过他们的框架animation。 任何想法如何做到这一点? 我提出了一个理论上的select:

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

我还没有尝试这个,但它是相当hacky。 我想知道是否有更好的select。

总结:我想通过NSTextAttachmentUITextView内animationUIImage而不需要额外的UIImageView对象。 你可以忽略这个事实,这是以前用UIWebView完成的。 UIImage具有用于设置animation帧的属性( imagesduration ),我现在已经configuration好了。 如果我把它分配给一个UIImageViewanimation,如果我把它设置为NSTextAttachment ,没有animation。

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

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

也就是说,我能想到的一个方法就是创build一个animationUIImageView作为UITextView的子视图,将其放置在NSLayoutManager放置NSTextAttachment ,并在UITextView滚动时滚动。 你可以通过调用boundingRectForGlyphRange:inTextContainer:可能在layoutManager:didCompleteLayoutForTextContainer:atEnd: NSTextAttachmentNSLayoutManager获取NSTextAttachment的矩形。