UIWebview и проблема делителя powerpoint - PullRequest
0 голосов
/ 20 февраля 2012

В идеале я хотел бы загрузить свои ppt и pdf документы в веб-просмотр без границ или разделителей. Я не верю, что это возможно. Так что этот вопрос изящно обращается с разделителем в документе ppt.

Я пытаюсь прокрутить ppt, делая свою собственную подкачку страниц. Я попробовал это, используя встроенную страницу прокрутки в веб-представлении, но это не сработало. Сложно рассчитать высоту разделителя, и разделитель всегда будет присутствовать при таком подходе.

В настоящее время я тестирую слайд-шоу на 31 страницу. Иногда некоторые из разделителей отображаются в верхней части веб-просмотра. (На 15, 24, 25 и 26 странице)

PPTX имеет соотношение сторон 16x9. Мой веб-просмотр 1024x576, и я предполагаю, что это размер слайда в веб-просмотре.

Я рассчитываю размер делителя следующим образом.

Высота документа при загрузке составляет 18069.
18069/576 ~ 31,369 Это означает, что имеется 31 страница.
Я рассчитываю объем пространства, занимаемого разделителями, следующим образом: 18069- (31 * 576) = 213.
Тогда 213/30 = 7.1 - высота делителя.

Я очень озадачен тем, что высота делителя является десятичной. Кроме того, меня смущает вопрос, почему в примере с 31 страницей страницы 15,24,25,26 не соответствуют должным образом.

Извините за то, что пока что казалось вопросом, направленным на определенный размер, но вот мой код для обработки действия перелистывания страниц для документов с динамическим размером.

- (void)handlePptSwipeUp:(UISwipeGestureRecognizer *)sender
{
  //swipe up means scroll down
  CGSize pptSize = pptWebView.scrollView.contentSize;
  float y = pptSize.height;
  int pages = y/pptWebView.frame.size.height;
  float diff = pptSize.height - pages*pptWebView.frame.size.height;
  float divider = diff/(pages-1);

  CGPoint cOffset = pptWebView.scrollView.contentOffset;
  float temp = pptScrollOffset + pptWebView.frame.size.height+divider;
  if (temp+pptWebView.frame.size.height <= pptWebView.scrollView.contentSize.height)  {
    pptScrollOffset = temp;
  }
  CGRect visibleRect = CGRectMake(cOffset.x, pptScrollOffset, pptWebView.frame.size.width, pptWebView.frame.size.height);
  [pptWebView.scrollView scrollRectToVisible:visibleRect animated:YES];

  NSLog(@"content width %f\ncontent height %f\npages %d\ndiff %f\ndivider %f\npptScrollOffset %f",pptWebView.scrollView.contentSize.width,y,pages,diff,divider,pptScrollOffset);
}

Вот пример вывода после прокрутки одной страницы

content width 1024.000000
content height 18069.000000
pages 31
diff 213.000000
divider 7.100000
pptScrollOffset 583.099976

1 Ответ

0 голосов
/ 01 августа 2012

Я прочитал похожую вещь на другой странице.

Я не могу найти страницу сейчас ... поэтому я просто поместил код, который может получить размер слайда.* Это код:

NSString *w=[_webView stringByEvaluatingJavaScriptFromString:@"function x(){var rtn='';for (var i=1;i<document.all.length;i++){var a=document.all[i];if (((a.clientWidth>0)&&(a.clientHeight>0))&&(a.scrollHeight.toString()==a.offsetHeight.toString())&&(a.offsetHeight.toString()==a.clientHeight.toString())){return ''+a.offsetWidth; }}return rtn;};x();"];
NSString *h=[_webView stringByEvaluatingJavaScriptFromString:@"function x(){var rtn='';for (var i=1;i<document.all.length;i++){var a=document.all[i];if (((a.clientWidth>0)&&(a.clientHeight>0))&&(a.scrollHeight.toString()==a.offsetHeight.toString())&&(a.offsetHeight.toString()==a.clientHeight.toString())){return ''+a.offsetHeight; }}return rtn;};x();"];

Затем прокрутите веб-просмотр

NSString* javascript = [NSString stringWithFormat:@"window.scrollBy(0, %@);", h];   
[_webView stringByEvaluatingJavaScriptFromString:javascript];

В этом примере границы не учитываютсяПросто вставьте их, я думаю, что это будет идеально ~~

...