// // UIScrollView+NTESDirection.m // NIM // // Created by chris on 16/1/24. // Copyright © 2016年 Netease. All rights reserved. // #import "UIScrollView+NTESDirection.h" #import @interface UIScrollView () @property (assign, nonatomic) NTESScrollViewDirection horizontalScrollingDirection; @property (assign, nonatomic) NTESScrollViewDirection verticalScrollingDirection; @end static const char horizontalScrollingDirectionKey; static const char verticalScrollingDirectionKey; @implementation UIScrollView (NTESDirection) - (void)startObservingDirection { [self addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; } - (void)stopObservingDirection { [self removeObserver:self forKeyPath:@"contentOffset"]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (![keyPath isEqualToString:@"contentOffset"]) return; CGPoint newContentOffset = [[change valueForKey:NSKeyValueChangeNewKey] CGPointValue]; CGPoint oldContentOffset = [[change valueForKey:NSKeyValueChangeOldKey] CGPointValue]; if (oldContentOffset.x < newContentOffset.x) { self.horizontalScrollingDirection = NTESScrollViewDirectionRight; } else if (oldContentOffset.x > newContentOffset.x) { self.horizontalScrollingDirection = NTESScrollViewDirectionLeft; } else { self.horizontalScrollingDirection = NTESScrollViewDirectionNone; } if (oldContentOffset.y < newContentOffset.y) { self.verticalScrollingDirection = NTESScrollViewDirectionDown; } else if (oldContentOffset.y > newContentOffset.y) { self.verticalScrollingDirection = NTESScrollViewDirectionUp; } else { self.verticalScrollingDirection = NTESScrollViewDirectionNone; } } #pragma mark - Properties - (NTESScrollViewDirection)horizontalScrollingDirection { return [objc_getAssociatedObject(self, (void *)&horizontalScrollingDirectionKey) intValue]; } - (void)setHorizontalScrollingDirection:(NTESScrollViewDirection)horizontalScrollingDirection { objc_setAssociatedObject(self, (void *)&horizontalScrollingDirectionKey, [NSNumber numberWithInt:horizontalScrollingDirection], OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NTESScrollViewDirection)verticalScrollingDirection { return [objc_getAssociatedObject(self, (void *)&verticalScrollingDirectionKey) intValue]; } - (void)setVerticalScrollingDirection:(NTESScrollViewDirection)verticalScrollingDirection { objc_setAssociatedObject(self, (void *)&verticalScrollingDirectionKey, [NSNumber numberWithInt:verticalScrollingDirection], OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end