GaiaXiOS/GaiaXiOS/Component/Node/GXGridNode.m [503:570]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    return cell;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    id <GXEventProtocal> eventListener = self.templateContext.templateData.eventListener;
    if (eventListener && [eventListener respondsToSelector:@selector(gx_onScrollEvent:)]) {
        if (nil == _scrollEvent) {
            _scrollEvent = [[GXEvent alloc] init];
            _scrollEvent.view = self.associatedView;
            _scrollEvent.nodeId = self.nodeId;
        }
        _scrollEvent.contentOffset = scrollView.contentOffset;
        [eventListener gx_onScrollEvent:_scrollEvent];
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    id <GXEventProtocal> eventListener = self.templateContext.templateData.eventListener;
    if (eventListener && [eventListener respondsToSelector:@selector(gx_onScrollEndEvent:)]) {
        if (nil == _scrollEvent) {
            _scrollEvent = [[GXEvent alloc] init];
            _scrollEvent.view = self.associatedView;
            _scrollEvent.nodeId = self.nodeId;
        }
        _scrollEvent.contentOffset = scrollView.contentOffset;
        [eventListener gx_onScrollEndEvent:_scrollEvent];
    }
    
    //埋点处理
    [self handleVisibleCells];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if (!decelerate) {
        id <GXEventProtocal> eventListener = self.templateContext.templateData.eventListener;
        if (eventListener && [eventListener respondsToSelector:@selector(gx_onScrollEndEvent:)]) {
            if (nil == _scrollEvent) {
                _scrollEvent = [[GXEvent alloc] init];
                _scrollEvent.view = self.associatedView;
                _scrollEvent.nodeId = self.nodeId;
            }
            _scrollEvent.contentOffset = scrollView.contentOffset;
            [eventListener gx_onScrollEndEvent:_scrollEvent];
        }
        
        //埋点处理
        [self handleVisibleCells];
    }
}


#pragma mark - appear

- (void)onShow{
    [super onShow];
    [self handleVisibleCells];
}

- (void)onHide{
    [super onHide];
}

- (void)handleVisibleCells{
    if (self.isAppear) {
        dispatch_async(dispatch_get_main_queue(), ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                UICollectionView *collectionView = (UICollectionView *)self.associatedView;
                NSArray *cells = [collectionView visibleCells];
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



GaiaXiOS/GaiaXiOS/Component/Node/GXScrollNode.m [423:491]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    return cell;
}


- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    id <GXEventProtocal> eventListener = self.templateContext.templateData.eventListener;
    if (eventListener && [eventListener respondsToSelector:@selector(gx_onScrollEvent:)]) {
        if (nil == _scrollEvent) {
            _scrollEvent = [[GXEvent alloc] init];
            _scrollEvent.view = self.associatedView;
            _scrollEvent.nodeId = self.nodeId;
        }
        _scrollEvent.contentOffset = scrollView.contentOffset;
        [eventListener gx_onScrollEvent:_scrollEvent];
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    id <GXEventProtocal> eventListener = self.templateContext.templateData.eventListener;
    if (eventListener && [eventListener respondsToSelector:@selector(gx_onScrollEndEvent:)]) {
        if (nil == _scrollEvent) {
            _scrollEvent = [[GXEvent alloc] init];
            _scrollEvent.view = self.associatedView;
            _scrollEvent.nodeId = self.nodeId;
        }
        _scrollEvent.contentOffset = scrollView.contentOffset;
        [eventListener gx_onScrollEndEvent:_scrollEvent];
    }
    
    //埋点处理
    [self handleVisibleCells];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if (!decelerate) {
        id <GXEventProtocal> eventListener = self.templateContext.templateData.eventListener;
        if (eventListener && [eventListener respondsToSelector:@selector(gx_onScrollEndEvent:)]) {
            if (nil == _scrollEvent) {
                _scrollEvent = [[GXEvent alloc] init];
                _scrollEvent.view = self.associatedView;
                _scrollEvent.nodeId = self.nodeId;
            }
            _scrollEvent.contentOffset = scrollView.contentOffset;
            [eventListener gx_onScrollEndEvent:_scrollEvent];
        }
        
        //埋点处理
        [self handleVisibleCells];
    }
}


#pragma mark - appear

- (void)onShow{
    [super onShow];
    [self handleVisibleCells];
}

- (void)onHide{
    [super onHide];
}

- (void)handleVisibleCells{
    if (self.isAppear) {
        dispatch_async(dispatch_get_main_queue(), ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                UICollectionView *collectionView = (UICollectionView *)self.associatedView;
                NSArray *cells = [collectionView visibleCells];
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



