我想獲得一個UIWebView動態更新,有點像卡拉OK盒,因爲它迭代了一個while循環。 tts引擎所說的單詞應該是橙色的(或者在html,.style2中)。我的UIWebView懶散地重新加載。當我希望顯示數據時,如何重新加載/刷新?
正在發生的事情,然而,就是在一個UIWebView不通過htmlKaraoke串的每次迭代更新它的顯示,但只有最後一個while循環。 UIWebView似乎以懶惰的方式重新加載,並在更新顯示之前等待while循環完成。我在代碼中包含了所有不同的方法,我試圖繞過這個(setNeedsDisplay,setNeedsLayout,重置htmlKaraoke字符串,重新加載UIWebView),但我似乎無法讓它做我想做的事情。
HTML代碼的更新像它應該(在橙色口語),但Webview是不是反映了這一點。
我怎樣才能讓web視圖到htmlKaraoke串的每次更新之後更新?
i = 0;
NSString *htmlHead = @"<html><head><style type='text/css'><!-- .style1 { font-size: 24px; font-weight: bold; font-family: Helvetica; } .style2 {color: #FF9900} --> </style></head><body><span class='style1'>";
NSString *htmlFoot = @"</span></body></html>";
NSString *htmlEmpHead = @"<span class='style2'>";
NSString *htmlEmpFoot = @"</span>";
NSMutableString *htmlKaraoke = [[NSMutableString alloc] init];
while(i <= wordWeAreUpToInt){
//wait until the tts is finished talking.
if(![[fliteEngine audioPlayer] isPlaying]){
//NSLog(@"flite is finished!");
//Add the word and highlight in the karaoke
/* Clear the html string
Make a for loop, where n = 0, n<i, n++
append black word
when for loop ends, and n == i, add an emph word (n==i when i is the currently spoken word).
*/
[karaokeWebView loadHTMLString:@" " baseURL:nil];
[karaokeWebView reload]; //doesn't do anything. These two lines are a waste of breath.
[htmlKaraoke setString:htmlHead];
for (int n = 0; n<i; n++) {
[htmlKaraoke appendString:[wordsArray objectAtIndex:n]];
[htmlKaraoke appendString:@" "];
}
[htmlKaraoke appendString:htmlEmpHead];
[htmlKaraoke appendString:[wordsArray objectAtIndex:i]];
[htmlKaraoke appendString:@" "];
[htmlKaraoke appendString:htmlEmpFoot];
NSLog(@"Emphasis: %@", [wordsArray objectAtIndex:i]);
[htmlKaraoke appendString:htmlFoot];
NSLog(@"htmlKaraoke: %@", htmlKaraoke);
[karaokeWebView loadHTMLString:htmlKaraoke baseURL:nil];
[karaokeWebView setNeedsDisplay];
[karaokeWebView setNeedsLayout]; //getting desperate....!
//speak the word
[self readSentence:[wordsArray objectAtIndex:i]];
i++;
}
}
[htmlKaraoke release];
wordWeAreUpToInt++;
}
好的,這是有道理的。任何人都可以想出另一種方法來製作/實現它嗎?此操作是單擊按鈕的結果。 – glenstorey 2010-11-10 02:27:45
我剛編輯我的答案。在那裏給出示例測試代碼。對於通過絃樂進行動畫製作,您只需稍微增加延遲(因此第一個延遲爲1秒,然後是2秒,然後是3等)。 – 2010-11-10 02:40:35
哦,注意你可能需要在每個點傳入一個字符串的_copy_,否則你只會傳遞一個指向可變字符串的指針(隨着循環的進行而改變)。通過更改'withObject:htmlKaraoke'位來實現。 – 2010-11-10 02:49:05