У меня есть функция, которая обновляет нумерацию страниц, т.е. подсчитывает общее количество страниц.
- (void) updatePagination{
if(!paginating){
NSLog(@"Pagination Started!");
paginating = YES;
totalPagesCount=0;
for (UIGestureRecognizer *gr in self.pageViewController.gestureRecognizers) {
[gr setEnabled:NO];
}
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[self loadSpine:currentSpineIndex atPageIndex:currentPageInSpineIndex];
[[loadedEpub.spineArray objectAtIndex:0] setDelegate:self];
//This Line calls method of another class
[[loadedEpub.spineArray objectAtIndex:0] loadChapterWithWindowSize:webView.bounds fontPercentSize:currentTextSize];
[currentPageLabel setText:@"?/?"];
}
}
}
Это метод, который он вызывает
- (void) loadChapterWithWindowSize:(CGRect)theWindowSize fontPercentSize:(int) theFontPercentSize{
fontPercentSize = theFontPercentSize;
windowSize = theWindowSize;
UIWebView* webView = [[UIWebView alloc] initWithFrame:windowSize];
[webView setDelegate:self];
NSURLRequest* urlRequest = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:spinePath]];
[webView loadRequest:urlRequest];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
[webView dealloc];
}
- (void) webViewDidFinishLoad:(UIWebView*)webView{
NSString *varMySheet = @"var mySheet = document.styleSheets[0];";
NSString *addCSSRule = @"function addCSSRule(selector, newRule) {"
"if (mySheet.addRule) {"
"mySheet.addRule(selector, newRule);" // For Internet Explorer
"} else {"
"ruleIndex = mySheet.cssRules.length;"
"mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);" // For Firefox, Chrome, etc.
"}"
"}";
NSString *insertRule1 = [NSString stringWithFormat:@"addCSSRule('html', 'padding: 0px; height: %fpx; -webkit-column-gap: 0px; -webkit-column-width: %fpx;')", webView.frame.size.height, webView.frame.size.width];
NSString *insertRule2 = [NSString stringWithFormat:@"addCSSRule('p', 'text-align: justify;')"];
NSString *setTextSizeRule = [NSString stringWithFormat:@"addCSSRule('body', '-webkit-text-size-adjust: %d%%;')",fontPercentSize];
[webView stringByEvaluatingJavaScriptFromString:varMySheet];
[webView stringByEvaluatingJavaScriptFromString:addCSSRule];
[webView stringByEvaluatingJavaScriptFromString:insertRule1];
[webView stringByEvaluatingJavaScriptFromString:insertRule2];
[webView stringByEvaluatingJavaScriptFromString:setTextSizeRule];
int totalWidth = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollWidth"] intValue];
pageCount = (int)((float)totalWidth/webView.bounds.size.width);
[webView dealloc];
[delegate chapterDidFinishLoad:self];
}
Из-за этого мой пользовательский интерфейс не получает удар, но когда пользователь закрывает или закрывает приложение просмотра, происходит сбой.Также еще одна кнопка для увеличения и уменьшения размера текста также называется тем же методом, поэтому, если он уже запущен, и пользователь нажимает на изменение размера шрифта, на который он нанес удар, или когда-нибудь произойдет сбой.
Мои вопросы:
- Можно ли запускать его в фоновом режиме, и если пользователь отклоняет модальный режим, то вместо сбоя он должен остановиться.
- Если пользователь нажимает на изменение размера шрифта, он должен остановить старый и запустить новый.
- могу ли я использовать рассчитанные итоговые страницы, даже если их обработка все еще продолжается.
Я использовал
[self performSelectorOnMainThread:@selector(LoadChapters) withObject:nil waitUntilDone:NO];
(работает, но иногда выдает ошибку для веб-просмотра)
и NSOperation (не работает)
для вызова этой единственной строки вызова функции.