当向下滚动时,活动指示器视图消失

3

我使用自定义节点LoadingIndicatorNode在按钮上创建了一个覆盖层,这个按钮是放在一个ASCellNode中的。当我向下滚动并向上滚动时,来自LoadingIndicatorNodeUIActivityIndicatorView会消失。

这是LoadingIndicatorNode类的代码:

@implementation LoadingIndicatorNode
- (instancetype)init
{
    self = [super init];
    if (self) {
        [self setOpaque:NO];
        self.backgroundColor = [UIColor colorWithWhite:1 alpha:0.6];
        self.activityNode = [[ASDisplayNode alloc] initWithViewBlock:^UIView * _Nonnull{
            UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: IPAD ? UIActivityIndicatorViewStyleWhiteLarge : UIActivityIndicatorViewStyleWhite];
            activity.color = [UIColor blackColor];
            activity.backgroundColor = [UIColor clearColor];
            [activity startAnimating];
            return activity;
        }];

        [self addSubnode:self.activityNode];
    }
    return self;
}

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize {
    ASCenterLayoutSpec *centerSpec = [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY sizingOptions:ASCenterLayoutSpecSizingOptionDefault child:self.activityNode];

    return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 0, 10, 0) child:centerSpec];
}

@end

这里是一些展示我如何使用它的代码。
_loadingIndicator = [[LoadingIndicatorNode alloc] init];
_loadingIndicator.hidden = YES;
[self addSubnode:_loadingIndicator];

[[[[self.viewModel.memberStatusCommand executing] not]
     distinctUntilChanged]
     subscribeNext:^(NSNumber *x) {
         [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:!x.boolValue];
         _loadingIndicator.hidden = x.boolValue;
         [self updateViewModelData];
         [self setNeedsLayout];
     }];

layoutSpecThatFits:方法的叠加层

ASOverlayLayoutSpec *overlay = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:_statusButton overlay:_loadingIndicator];
    overlay.style.flexBasis = ASDimensionMake(@"50%");
    overlay.style.alignSelf = ASStackLayoutAlignSelfStretch;
    overlay.style.flexShrink = 1;
    overlay.style.flexGrow = 1;
1个回答

1

我刚刚在LoadingIndicatorNode中创建了一个弱引用UIActivityIndicatorView,并实现了didEnterVisibleState方法并调用了startAnimating

- (void)didEnterVisibleState {
    [super didEnterVisibleState];
    [self.activity startAnimating];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接