123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- //
- // UIScrollView+NTESDirection.m
- // NIM
- //
- // Created by chris on 16/1/24.
- // Copyright © 2016年 Netease. All rights reserved.
- //
- #import "UIScrollView+NTESDirection.h"
- #import <objc/runtime.h>
- @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
|