Pergunta

Eu estou trabalhando com o livro digital aplicação.Eu uso swf carregador para carregar swf páginas criadas a partir de pdf.Eu uso TextSnapsot para desenhar a linha de texto com destaque nas páginas.O destaque é cuidadosamente mantido nas respectivas páginas durante toda a sessão e, mais tarde, ele pode ser atualizado/eliminados sem qualquer problema.Tudo estava funcionando muito bem até que eu feitas as seguintes alterações no swf carregar abordagem para habilitar o cache de página:

Agora estou a carregar swf carregador de objeto em memória de aplicativo e, ao fazer saltar de uma página para outra página eu sou apenas copiando o conteúdo da próxima página para o atual swf loader que é a apresentação para o usuário.Há dois conjuntos de swf carregadores - um para exibir a página e outro para armazenar em cache a página seguinte/anterior(es).Sobre a colocação em cache do lado, eu carregar o swf na memória da aplicação e depois de ser carregado eu pegar todo o conteúdo do swf carregado página (os filhos de clipe de filme) em uma matriz de coleta.Ao alterar a página de eu copiar o conteúdo em cache no swf carregador do clipe de filme que está a apresentar a página.

Agora, quando eu destaque na página exibir e navegar/quarto de página e volta novamente para a página onde eu fiz a destacar:Ele mostra o destaque que eu fiz.Mas assim que eu tentar tirar outro destaque na página, o destaque é instantaneamente desaparece da página.

Eu suspeito que o Textsnapshot objeto que atrai destaque durante a navegação (para o destino de exibição de página é diferente do que redesenha/atualização de destaque na mesma página da próxima vez.Embora o Textsnapshot identificação do objeto para ambos os objetos é a mesma.

Aqui estão algumas trecho de código:

Para copiar o conteúdo do swf carregador de objeto armazenado em cache na memória de aplicativo:

    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;

    }

Para copiar o conteúdo para o swf loader que está exibindo a página:

    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;

    }

depois disso, eu envio swf carregador completo manualmente e no manipulador de evento que eu tome o texto snap shot objeto.(highlightManager.como)

O código que eu uso para desenhar destaque manualmente(usando o arrastar do mouse na página).

    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();

            }                

        }            

    }

O código que eu uso para redesenhar desenhados anteriormente destaque quando eu voltar para a página:

    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);

    }

Olhando para a frente para o seu apoio para resolver este problema.

Cumprimentos,

JS

Foi útil?

Solução

O que você está fazendo não é 'cache', é pré-carregamento anteriores/próximas páginas.Também, o que você está fazendo é realmente má prática.Não sei por que você está carcaça essas coisas em MovieClips, a menos que o Fs que são;se eles estão Flex fundos soberanos, que vai ser UIComponents.Eu recomendaria você repensar a sua abordagem.Eu não me incomodei mesmo copiar as crianças ou qualquer coisa mais.Uma vez que o navegador carrega uma SWF, ele agora faz parte do cache do navegador, ou seja, a próxima vez que é solicitada, ela não vai realmente fazer o download.

Se você deseja 'cache' seus SWFs para uma mais rápida de anterior/seguinte página virar, eu recomendo que você use algo como SWFLoader apenas para carregar outros SWFs sem, na verdade, adicionando-lo para o ecrã e, em seguida, removê-lo da memória.Que irá armazenar em cache os fundos soberanos para você no navegador.Em seguida, quando o usuário clique em anterior ou para a próxima, basta alterar a url do principal swfloader da página atualmente exibida e ele irá carregá-lo muito rapidamente.Nenhum download, pois já está em cache, ele só precisa criar uma instância.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top