因爲項目當中涉及webView與scrollView的滑動交互,一開始是經過計算webView的高度而且禁用webView的滑動,而後改變scrollView的contentSize去實現滑動操做,但這種作法當webView加載的內容裏圖片過多時會形成內存爆滿,因此換了一種作法去實現。git
Demo下載github
響應多手勢的方法web
/**
讓ScrollView響應多手勢
*/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
複製代碼
/** scrollView是否可滑動 */
@property (nonatomic, assign) BOOL isCanScroll;
/** scrollV */
@property (nonatomic, strong) LQScrollView *scrollV;
複製代碼
/** 是否能夠滑動 */
@property (nonatomic, assign) BOOL isWebCanScroll;
複製代碼
經過isWebCanScroll屬性來控制是否可滑動,通用設置webView中ScrollView的contentOffset來實現webView不可滑動,當webView可滑動而且滑動到頂部的時候,此時改變webView的isWebCanScroll屬性從新讓webView不可滑,而且將這種狀態用通知發送出去。bash
#pragma mark UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView == self.scrollView) {
CGFloat offY = scrollView.contentOffset.y;
// NSLog(@"offY == %lf",offY);
if (!self.isWebCanScroll) { //經過設置 contentOffset 讓webView不可滑動
self.scrollView.contentOffset = CGPointZero;
}
if (offY < 0) { //當webView滑動頂部時 使webView不可滑 而且將該狀態用通知發送出去
self.isWebCanScroll = NO;
self.scrollView.contentOffset = CGPointZero;
[[NSNotificationCenter defaultCenter] postNotificationName:@"WEBVIEWSCROLLTOTOP" object:nil];
}
}
}
複製代碼
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat offY = scrollView.contentOffset.y;
if (scrollView == self.scrollV) {
if (offY >= TopViewHeight) { //此時webView到達頂部 讓scrollView不可滑 讓webView可滑
self.scrollV.contentOffset = CGPointMake(0, TopViewHeight);
if (self.isCanScroll) {
self.isCanScroll = NO;
self.webV.isWebCanScroll = YES;
}
}else if (offY >= 0 && offY < 200){ //scrollView處於可滑動範圍
if (self.isCanScroll) {
self.scrollV.contentOffset = CGPointMake(0, offY);
}else{
if (self.webV.isWebCanScroll && self.webV.scrollView.contentOffset.y == 0) { //解決臨界值問題
self.isCanScroll = YES;
self.webV.isWebCanScroll = NO;
} else {
self.scrollV.contentOffset = CGPointMake(0, TopViewHeight);
}
}
}
}
}
複製代碼
/**
接收webView不可滑的通知 scrollView設置爲可滑
*/
- (void)webViewScrollToTop:(NSNotification *)nofi{
self.isCanScroll = YES;
}
複製代碼
補充說明:post
該處理方式不只適用於webView與scrollView也適用於tableView於ScrollView的交互。處理方式是同樣的,都是經過BOOL 屬性去控制是否可滑動,而是否可滑動的處理是經過在ScrollView的代理方法scrollViewDidScroll去控制ScrollView的contentOffset實現的。ui
GitHub地址 :github.com/qiuyubude/G…atom
簡書地址:www.jianshu.com/p/5ee0c074a…spa