@@ -36,7 +36,7 @@ - (id)initWithWebView:(UIView *)webView {
3636 [self .webView removeFromSuperview ];
3737 // prevent webView from bouncing
3838 if ([self .webView respondsToSelector: @selector (scrollView )]) {
39- ((UIScrollView*)[self .webView scrollView ]).bounces = NO ;
39+ ((UIScrollView*)[self .webView performSelector: @selector ( scrollView ) ]).bounces = NO ;
4040 } else {
4141 for (id subview in [self .webView subviews ]) {
4242 if ([[subview class ] isSubclassOfClass: [UIScrollView class ]]) {
@@ -48,12 +48,14 @@ - (id)initWithWebView:(UIView *)webView {
4848 self.pluginScrollView = [[MyPluginScrollView alloc ] initWithFrame: [self .webView frame ]];
4949
5050 self.pluginScrollView .autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
51-
52- self.pluginScrollView .autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
53- UIView *uiview = self.webView ;
54- uiview.scrollView .delegate = self;
55- [self .pluginScrollView setContentSize: self .webView.scrollView.frame.size ];
56-
51+
52+ // Set webview delegate to MyPluginLayer and set contentSize of pluginScrollView to match the one of webView
53+ if ([self .webView respondsToSelector: @selector (scrollView )]) {
54+ UIScrollView *webViewScrollView = [self .webView performSelector: @selector (scrollView )];
55+ webViewScrollView.delegate = self;
56+ self.pluginScrollView .contentSize = webViewScrollView.frame .size ;
57+ }
58+
5759 [self addSubview: self .pluginScrollView];
5860
5961 [self addSubview: self .webView];
@@ -90,18 +92,24 @@ - (void)stopRedrawTimer {
9092}
9193- (void )scrollViewDidEndDecelerating : (UIScrollView *)scrollView
9294{
93- CGPoint offset = self.webView .scrollView .contentOffset ;
94- self.pluginScrollView .contentOffset = offset;
95+ [self syncPluginScrollViewContentOffsetWithWebViewScrollView ];
9596}
9697
9798-(void )scrollViewDidEndDragging : (UIScrollView *)scrollView willDecelerate : (BOOL )decelerate {
98- CGPoint offset = self.webView .scrollView .contentOffset ;
99- self.pluginScrollView .contentOffset = offset;
99+ [self syncPluginScrollViewContentOffsetWithWebViewScrollView ];
100100}
101101- (void )scrollViewDidScroll : (UIScrollView *)scrollView {
102- CGPoint offset = self.webView .scrollView .contentOffset ;
103- self.pluginScrollView .contentOffset = offset;
102+ [self syncPluginScrollViewContentOffsetWithWebViewScrollView ];
104103}
104+
105+ // Syncs pluginScrollView.contentOffset with webView.scrollView.contentOffset
106+ - (void )syncPluginScrollViewContentOffsetWithWebViewScrollView {
107+ if ([self .webView respondsToSelector: @selector (scrollView )]) {
108+ UIScrollView *webViewScrollView = [self .webView performSelector: @selector (scrollView )];
109+ self.pluginScrollView .contentOffset = webViewScrollView.contentOffset ;
110+ }
111+ }
112+
105113- (void )clearHTMLElements {
106114 @synchronized (self.pluginScrollView .HTMLNodes ) {
107115 NSMutableDictionary *domInfo;
@@ -229,13 +237,16 @@ - (void)resizeTask:(NSTimer *)timer {
229237}
230238
231239- (void )updateViewPosition : (PluginViewController *)pluginViewCtrl {
232- CGFloat zoomScale = self.webView .scrollView .zoomScale ;
233- [self .pluginScrollView setFrame: self .webView.frame];
234-
235- CGPoint offset = self.webView .scrollView .contentOffset ;
236- offset.x *= zoomScale;
237- offset.y *= zoomScale;
238- [self .pluginScrollView setContentOffset: offset];
240+ if (![self .webView respondsToSelector: @selector (scrollView )]) return ;
241+
242+ [self .pluginScrollView setFrame: self .webView.frame];
243+
244+ UIScrollView *webViewScrollView = [self .webView performSelector: @selector (scrollView )];
245+ CGFloat zoomScale = webViewScrollView.zoomScale ;
246+ CGPoint offset = webViewScrollView.contentOffset ;
247+ offset.x *= zoomScale;
248+ offset.y *= zoomScale;
249+ [self .pluginScrollView setContentOffset: offset];
239250
240251 if (!pluginViewCtrl.divId ) {
241252 return ;
@@ -376,8 +387,15 @@ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
376387 return [self .webView hitTest: browserClickPoint withEvent: event];
377388 }
378389
379- float offsetX = self.webView .scrollView .contentOffset .x ;
380- float offsetY = self.webView .scrollView .contentOffset .y ;
390+ float offsetX = 0 ;
391+ float offsetY = 0 ;
392+
393+ // Take contentOffset.x and .y from webView.scrollView
394+ if ([self .webView respondsToSelector: @selector (scrollView )]) {
395+ UIScrollView *webViewScrollView = [self .webView performSelector: @selector (scrollView )];
396+ offsetX = webViewScrollView.contentOffset .x ;
397+ offsetY = webViewScrollView.contentOffset .y ;
398+ }
381399
382400 float webviewWidth = self.webView .frame .size .width ;
383401 float webviewHeight = self.webView .frame .size .height ;
0 commit comments