使用UIWebView快速滚动

时间:2014-08-15 00:36:56

标签: ios objective-c uiwebview

我有UIWebView我通过

自动滚动
  // First the timer is called.  
 [NSTimer scheduledTimerWithTimeInterval:scrollerTimerInterval
                                         target:self
                                       selector:@selector(_autoScrollTimerMethod)
                                       userInfo:nil
                                        repeats:YES];
      - (void) _autoScrollTimerMethod{
        scrollerTimerCount++;
        CGFloat offset = scrollerTimerCount * 1;
        uiWebView.scrollView.contentOffset = CGPointMake(0, offset);
 }  

uiWebView的类型为UIWebView

此代码会自动滚动uiWebView,但速度太慢。程序的另一部分有一个闪烁,当该代码被注释掉时不会发生。

欢迎任何建议。

干杯,

1 个答案:

答案 0 :(得分:3)

所以我想我想出了一个可能做你需要的解决方案。基本上,我在UIScrollView中创建了一个UIWebView。我不得不这样做,因为否则UIWebView本身就不能完全呈现动画的原因,你会获得大部分白色(webview的未渲染部分)。因此,在Interface Builder中,添加一个带有webview的scrollview,然后将它们连接到IBOutlets。

您还需要ViewController来实现UIWebViewDelegate协议。

@interface ViewController : UIViewController <UIWebViewDelegate>

@end

在viewDidLoad中,(或界面构建器)连接webview的委托:

    self.webView.delegate = self;

然后在网页浏览中加载网址:

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com/questions/"]]];

webview完成加载后,我们会将其框架扩展到contentSize的完整高度,从而使其完全呈现。如果您对非常大的网页执行此操作,这将不会是内存滚刀,因此请谨慎使用。然后我们将滚动视图的contentSize设置为匹配,然后简单地动画设置内容偏移到结尾,无论你想要什么持续时间。

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

   webView.frame = CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.scrollView.contentSize.width, webView.scrollView.contentSize.height);

    self.scrollView.contentSize = webView.scrollView.contentSize;

    [UIView animateWithDuration:10 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        [self.scrollView setContentOffset:CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.frame.size.height)];
    } completion:^(BOOL finished) {

    }];
}