From a3b80750f311880b039e5ea22d93e54e82c8d2bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=86=E3=81=86=E3=81=A8=E3=81=86=E3=81=9B=E3=81=84?= Date: Mon, 16 Jul 2018 02:49:11 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20mj=5FscrollDistance?= =?UTF-8?q?=EF=BC=8Cmj=5FscrollDirection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MJRefresh/UIScrollView+MJExtension.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/MJRefresh/UIScrollView+MJExtension.h b/MJRefresh/UIScrollView+MJExtension.h index dd70d088..c2325aa5 100644 --- a/MJRefresh/UIScrollView+MJExtension.h +++ b/MJRefresh/UIScrollView+MJExtension.h @@ -22,4 +22,14 @@ @property (assign, nonatomic) CGFloat mj_contentW; @property (assign, nonatomic) CGFloat mj_contentH; + +/** Ma.).Mi ✎ + * 首页tabbar滚动隐藏新策略 + * @1. 根据滚动距离判断 + * @2. 根据滚动方向判断 + * ps: 希望能加入到扩展当中,不用在维护previousOffsetY临时变量。😊 + */ +@property (nonatomic, assign, readonly) NSInteger mj_scrollDistance; +@property (nonatomic, copy, readonly) NSString *mj_scrollDirection; + @end From 067f604e93164cb5d6bf2e0b570270bccd9d3ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=86=E3=81=86=E3=81=A8=E3=81=86=E3=81=9B=E3=81=84?= Date: Mon, 16 Jul 2018 02:51:12 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MJRefresh/UIScrollView+MJExtension.m | 85 ++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/MJRefresh/UIScrollView+MJExtension.m b/MJRefresh/UIScrollView+MJExtension.m index b8158fe2..a4935319 100644 --- a/MJRefresh/UIScrollView+MJExtension.m +++ b/MJRefresh/UIScrollView+MJExtension.m @@ -152,5 +152,90 @@ - (CGFloat)mj_contentH { return self.contentSize.height; } + +/** Ma.).Mi ✎ + * 每次 scrollview 滑动的方向 + */ +- (NSString *)mj_scrollDirection { + NSInteger distance = self.mj_scrollDistance; + /** Ma.).Mi ✎ + * 如果是 UITableView + */ + if ([self.delegate respondsToSelector:@selector(tableView:numberOfRowsInSection:)] || [self.delegate respondsToSelector:@selector(numberOfSectionsInTableView:)]) { + return distance > 0 ? @"bottom" : (distance != 0 ? @"top" : @"stop"); + } else { + if (self.mj_offsetX > self.mj_offsetY) { + return distance > 0 ? @"right" : (distance != 0 ? @"left" : @"stop"); + } else { + return distance > 0 ? @"bottom" : (distance != 0 ? @"top" : @"stop"); + } + } +} + +/** Ma.).Mi ✎ + * 每次 scrollview 滑动的距离 + */ +- (NSInteger)mj_scrollDistance { + if (self.mj_offsetY > 0) { + /** Ma.).Mi ✎ + * 如果是 UITableView + */ + if ([self.delegate respondsToSelector:@selector(tableView:numberOfRowsInSection:)] || [self.delegate respondsToSelector:@selector(numberOfSectionsInTableView:)]) { + return ABS(self.mj_offsetY) - ABS(self.mj_previousOffsetY) + self._setPreviousOffsetY; + } else { + if (self.mj_offsetX > self.mj_offsetY) { + return ABS(self.mj_offsetX) - ABS(self.mj_previousOffsetX) + self._setPreviousOffsetX; + } else { + return ABS(self.mj_offsetY) - ABS(self.mj_previousOffsetY) + self._setPreviousOffsetY; + } + } + } else if (self.mj_offsetY < 0) { + return self.mj_offsetY; + } else { + return 0; + } +} + +/** Ma.).Mi ✎ + * previous contentOffset.y + */ +- (CGFloat)mj_previousOffsetY { + id value = objc_getAssociatedObject(self, _cmd); + if (value) { + CGFloat value_float = ((NSNumber *)value).floatValue; + return value_float; + } else { + objc_setAssociatedObject(self, _cmd, [NSNumber numberWithFloat:self.mj_offsetY], OBJC_ASSOCIATION_RETAIN); + } + + return 0; +} + +/** Ma.).Mi ✎ + * previous contentOffset.x + */ +- (CGFloat)mj_previousOffsetX { + id value = objc_getAssociatedObject(self, _cmd); + if (value) { + CGFloat value_float = ((NSNumber *)value).floatValue; + return value_float; + } else { + objc_setAssociatedObject(self, _cmd, [NSNumber numberWithFloat:self.mj_offsetX], OBJC_ASSOCIATION_RETAIN); + } + + return 0; +} + +#pragma mark #Ma.).Mi# - private method +- (int)_setPreviousOffsetX { + objc_setAssociatedObject(self, @selector(mj_previousOffsetX), [NSNumber numberWithFloat:self.mj_offsetX], OBJC_ASSOCIATION_RETAIN); + return 0; +} + +- (int)_setPreviousOffsetY { + objc_setAssociatedObject(self, @selector(mj_previousOffsetY), [NSNumber numberWithFloat:self.mj_offsetY], OBJC_ASSOCIATION_RETAIN); + return 0; +} + @end #pragma clang diagnostic pop From f00b5228de5c594d6bd27899435a75ec8403a48e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=86=E3=81=86=E3=81=A8=E3=81=86=E3=81=9B=E3=81=84?= Date: Mon, 16 Jul 2018 14:27:00 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=94=B9=E5=8F=98=20mj=5FscrollDirection?= =?UTF-8?q?=20=E7=B1=BB=E5=9E=8B=E4=B8=BA=20enum=20ScrollDirection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MJRefresh/UIScrollView+MJExtension.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MJRefresh/UIScrollView+MJExtension.m b/MJRefresh/UIScrollView+MJExtension.m index a4935319..7976a5a5 100644 --- a/MJRefresh/UIScrollView+MJExtension.m +++ b/MJRefresh/UIScrollView+MJExtension.m @@ -156,18 +156,18 @@ - (CGFloat)mj_contentH /** Ma.).Mi ✎ * 每次 scrollview 滑动的方向 */ -- (NSString *)mj_scrollDirection { +- (ScrollDirection)mj_scrollDirection { NSInteger distance = self.mj_scrollDistance; /** Ma.).Mi ✎ * 如果是 UITableView */ if ([self.delegate respondsToSelector:@selector(tableView:numberOfRowsInSection:)] || [self.delegate respondsToSelector:@selector(numberOfSectionsInTableView:)]) { - return distance > 0 ? @"bottom" : (distance != 0 ? @"top" : @"stop"); + return distance > 0 ? Bottom : (distance != 0 ? Top : None); } else { if (self.mj_offsetX > self.mj_offsetY) { - return distance > 0 ? @"right" : (distance != 0 ? @"left" : @"stop"); + return distance > 0 ? Right : (distance != 0 ? Left : None); } else { - return distance > 0 ? @"bottom" : (distance != 0 ? @"top" : @"stop"); + return distance > 0 ? Bottom : (distance != 0 ? Top : None); } } } From f548f7851b430b54f0a1e363df46ff70aef9fee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=86=E3=81=86=E3=81=A8=E3=81=86=E3=81=9B=E3=81=84?= Date: Mon, 16 Jul 2018 14:28:49 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20ScrollDirection=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MJRefresh/UIScrollView+MJExtension.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MJRefresh/UIScrollView+MJExtension.h b/MJRefresh/UIScrollView+MJExtension.h index c2325aa5..06c6c840 100644 --- a/MJRefresh/UIScrollView+MJExtension.h +++ b/MJRefresh/UIScrollView+MJExtension.h @@ -27,9 +27,12 @@ * 首页tabbar滚动隐藏新策略 * @1. 根据滚动距离判断 * @2. 根据滚动方向判断 - * ps: 希望能加入到扩展当中,不用在维护previousOffsetY临时变量。😊 + * ps: 希望能加入到扩展当中,不用再维护previousOffsetY临时变量。😊 */ +typedef NS_ENUM(NSInteger, ScrollDirection) { + None = 0, Top, Left, Bottom, Right +}; @property (nonatomic, assign, readonly) NSInteger mj_scrollDistance; -@property (nonatomic, copy, readonly) NSString *mj_scrollDirection; +@property (nonatomic, assign, readonly) ScrollDirection mj_scrollDirection; @end