Texto a voz y navegación

Estoy usando Acapela TTS en iOS. Tengo un documento HTML con todo el texto (y marcado) que quiero leer. El texto está dividido en párrafos y quiero poder iniciar el TTS en cada encabezado. Por el momento, coloco cada párrafo en su propio UIWebView (para manejar el marcado interno) y los agrego a un UIScrollView para navegar por todos los elementos. Cada UIWebView está sobrecargado con un botón, por lo que cuando se presiona, el texto conectado se lee en voz alta. Mi problema ahora es que tengo que colocar UIWebView y Buttons usando un marco (es decir, una posición Y estática), pero esto implica que tengo la altura exacta, que es mi problema actual. He intentado usar las soluciones mencionadas en esta pregunta: Altura de UIWebView, pero todavía no se ve bien, ya sea que las vistas web son demasiado altas o cortas, y necesito que sea perfecto, para que parezca una página web consistente.

¿Alguien sabe de una forma diferente de hacer este tipo de TTS sin dividirlo en vistas web separadas que he pasado por alto?

Este es mi código que coloca las UIWebViews:

float yOffset = 0;
UIWebView *previous = nil;

//UIWebView delegate
-(void)webViewDidFinishLoad:(UIWebView *)webView{

NSString *height = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];

if(previous!=nil){
    yOffset += previous.frame.size.height;
}
CGFloat h = [height floatValue];

CGRect frame = CGRectMake(0, yOffset, scrollView.frame.size.width, h); 

[webView setFrame:frame];
[webView setOpaque:NO];
[webView setBackgroundColor:[UIColor whiteColor]];
previous = webView;
[scrollView addSubview:webView];

yOffset += previous.frame.size.height;

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, yOffset)];

}

preguntado el 26 de abril de 12 a las 08:04

1 Respuestas

Solo una idea: puede convertir los párrafos completos en enlaces en los que se puede hacer clic que apuntan a algún identificador del párrafo. Luego puede anular el evento de clic con UIWebViewDelegate y obtenga el texto del párrafo con javascript. Me refiero a algo como esto:

HTML:

<p id="paragraph1"><a href="paragraph1">First paragraph</a></p>
<p id="paragraph2"><a href="paragraph2">Second paragraph</a></p>

Implementar shouldStartLoadWithRequest of UIWebViewDelegate:

           - (BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request 
            navigationType:(UIWebViewNavigationType)navigationType 
{
  NSString* link = [request.URL lastPathComponent]; // not sure

  // use rangeOfString to find all
  if (inType == UIWebViewNavigationTypeLinkClicked && [link compare:@"paragraph1"] == NSOrderedSame) 
  { 
    // check this
    NSString* javaScript = 
      [NSString stringWithFormat:@"document.getElementById('%@').nodeValue", link]; 
    NSString paragraphToRead = 
      [webView stringByEvaluatingJavaScriptFromString:javaScript];
    // read out paragraphToRead
    return NO;
  }
}

Respondido 26 Abr '12, 10:04

Es una buena idea, pero el problema es que no puedo cambiar el HTML. Lo proporciona una empresa, que realmente no tiene el conocimiento para crear etiquetas más específicas.. - SeñoritaJorge

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.