我正在使用数字图书应用程序。我使用 swf 加载器来加载从 pdf 创建的 swf 页面。我使用 TextSnapsot 在页面上绘制内联文本突出显示。在整个会话期间,突出显示在各个页面上完全保留,以后可以毫无问题地更新/删除。在我对 swf 加载方法进行以下更改以启用页面缓存之前,一切都运行良好:
我现在正在将 swf 加载器对象加载到应用程序内存中,并且在从一个页面跳转到另一个页面时,我只是将下一页的内容复制到当前显示给用户的 swf 加载器中。有两组 swf 加载器 - 一组用于显示页面,另一组用于缓存下一页/上一页。在缓存方面,我将 swf 加载到应用程序内存中,并在加载后将加载的 swf 页面(它的影片剪辑的子项)的所有内容选择到数组集合中。在更改页面时,我将缓存的内容复制到显示页面的 swf 加载器的影片剪辑中。
现在,当我在显示的页面上突出显示并从页面来回导航并再次返回到我进行突出显示的页面时:它显示了我所做的突出显示。但是,一旦我尝试在该页面上绘制另一个亮点,之前的亮点就会立即从页面上消失。
我怀疑在导航(到目标显示页面)时绘制高亮的 Textsnapshot 对象与下次在同一页面上重绘/更新高亮的对象不同。尽管两个对象的 Textsnapshot 对象 ID 相同。
以下是一些代码片段:
从缓存在应用程序内存中的 swf 加载器对象复制内容:
private function copyPageContent():void
{
var contentCollection:ArrayCollection = new ArrayCollection();
_pageContentVO = new PageContentVO();
_pageContentVO.contentHeight = MovieClip(_swfPageLoader.content).height;
_pageContentVO.contentWidth = MovieClip(_swfPageLoader.content).width;
var count:int = MovieClip(_swfPageLoader.content).numChildren;
for(var i:int=0;i<count;i++)
{
var dispObject:DisplayObject = MovieClip(_swfPageLoader.content).removeChildAt(0);
contentCollection.addItem(dispObject);
}
_pageContentVO.pageContentCollection = contentCollection;
_swfPageLoader = null;
}
将内容复制到显示页面的 swf 加载器:
private function copyContent(pageContentVo:PageContentVO):void
{
for(var i:int = 0;i<pageContentVo.pageContentCollection.length;i++)
{
var dispObject:DisplayObject = pageContentVo.pageContentCollection.getItemAt(i) as DisplayObject;
MovieClip(this.content).addChild(dispObject);
}
this.content.height = this.height;
this.content.width = this.width;
}
在此之后,我手动调度 swf 加载器的完成,并在该事件的处理程序中获取文本快照对象。(highlightManager.as)
我用来手动绘制突出显示的代码(在页面上使用鼠标拖动)。
public function setHighlight():void
{
removeAll();
if(_textSnapShot!=null && _textSnapShot.getText(0,_textSnapShot.charCount)!="")
{
if(_isCoveredTextSelectedAtAnyInstance)
{
_textSnapShot.setSelected(_beginIndex,_endIndex+1,false); //this is the global variable to the class
}
else
{
_textSnapShot.setSelectColor(0xfff100);
_textSnapShot.setSelected(_beginIndex,_endIndex+1,true);
}
if(saveHighlight)
{
countHighlightedSegments();
}
}
}
当我返回页面时,我用来重绘先前绘制的突出显示的代码:
public function showHighlights(textSnapShot:TextSnapshot,currentPageNum:int):void
{
if(currentPageNum >= 0)
{
textSnapShot.setSelected(0,textSnapShot.charCount,false);
var pageVO:PageVO = _model.eBookVO.eBookPagesVO.getItemAt(currentPageNum) as PageVO;
var objColl:ArrayCollection = new ArrayCollection();
objColl.source = pageVO.highLightSelection;
for(var i:int=0;i<objColl.length;i++)
{
var highlightVO:HighlightVO = new HighlightVO();
highlightVO.beginIndex = objColl.getItemAt(i).beginIndex;
highlightVO.endIndex = objColl.getItemAt(i).endIndex;
setHighlightedSegment(textSnapShot,highlightVO.beginIndex,highlightVO.endIndex);
}
}
}
private function setHighlightedSegment(textSnapShot:TextSnapshot,beginIndex:int,endIndex:int):void
{
textSnapShot.setSelectColor(0xfff100);
textSnapShot.setSelected(beginIndex,endIndex,true);
}
期待您的支持以解决此问题。
问候,
JS