2012-04-26 3 views
0

iOS에서 Acapela TTS를 사용하고 있습니다. 내가 읽고 싶은 모든 텍스트 (및 마크 업)가있는 HTML 문서가 있습니다. 텍스트가 단락으로 나뉘어 있으며 각 머리글에서 TTS를 시작할 수 있기를 원합니다. 현재 각 단락을 내부 UIWebView (내부 마크 업 처리 용)에 넣고이를 모든 요소를 ​​탐색하기위한 UIScrollView에 추가합니다. 각 UIWebView는 버튼으로 오버로드되어 있으므로 눌렀을 때 연결된 텍스트가 소리내어 읽혀집니다. 내 문제는 지금, UIWebView 및 단추 (정적 y- 위치 의미)를 사용하여 UIWebView 및 단추를 배치해야하지만, 이것은 내 현재 문제가있는 정확한 높이가 있음을 의미합니다. 이 질문에 언급 된 솔루션을 사용해 보았습니다 : UIWebView height,하지만 여전히 좋지 않습니다 - 웹 뷰가 너무 높거나 짧고 완벽해야 웹 사이트가 일관된 것처럼 보입니다.음성 및 내비게이션 텍스트

내가 간과 한 별도의 웹보기에서이 유형의 TTS를 분리하지 않고 다른 사람이이 방법을 사용하는 것을 아는 사람이 있습니까?

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

}

답변

0

그냥 아이디어 :

이는 UIWebViews의 배치하는 것이 내 코드 당신이 단락의 일부 식별자를 가리 클릭 가능한 링크로 전체 단락을 돌 수 있었다. 그런 다음 클릭 이벤트를 UIWebViewDelegate으로 대체하고 자바 스크립트로 단락 텍스트를 가져올 수 있습니다.

HTML :

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

shouldStartLoadWithRequestUIWebViewDelegate의 구현 :이 같은 의미

  - (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; 
    } 
} 
+0

그 소리 생각을하지만, 문제는 HTML을 변경할 수있다. 더 구체적인 태그를 만들 수있는 지식이없는 회사에서 제공합니다. – MsJorge