当用户滚动相邻的 UIScrollView 时,我的 UIView 子类不调用 drawRect

My UIView subclass doesn't call drawRect while the user is scrolling an adjacent UIScrollView

我有一个 UIView 的子类,叫做 UIRefreshView。它在生活中的唯一目的是,当您向它传递 NSDate* 时,它会显示一个矩形,该矩形会逐渐变小,直到 NSDate* 接近其宽度为零的点。

它在正常情况下运行良好。但是,当用户在相邻的 UITableView 上按住手指时,矩形在 UITableView 滚动时停止收缩。然后,它 'jumps' 到它应该的宽度。

我做错了什么?

我的代码(略有删减)如下。

@implementation UIRefreshView

- (void) commonInit {
    self.backgroundColor = [UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0];
    self.color = [UIColor darkGrayColor]; // default
}

- (void) beginAnimatingUntilTime:(NSDate *)targetTime {

    // Store total number of seconds until the rectangle should be gone
    self.refreshInterval = ([targetTime timeIntervalSinceDate:[NSDate date]]);

    self.refreshTimer = [NSTimer scheduledTimerWithTimeInterval:0.0333333  target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];

}

- (void) timerTick:(id)sender {
    [self setNeedsDisplay];
}

- (void) drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGRect foreRectangle = CGRectMake(0, 0, (self.bounds.size.width * [self percentageTimeRemaining]), self.bounds.size.height);

    // Draw BG rectangle
    CGContextSetFillColorWithColor(context, self.backgroundColor.CGColor);
    CGContextAddRect(context, CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height));
    CGContextFillPath(context);

    //Draw a rectangle
    CGContextSetFillColorWithColor(context, self.color.CGColor);
    CGContextAddRect(context, foreRectangle);
    CGContextFillPath(context);

}

- (double) percentageTimeRemaining {

    NSTimeInterval timeUntilRefresh = ([self.refreshTime timeIntervalSinceDate:[NSDate date]]);
    return (timeUntilRefresh / self.refreshInterval);
}

What am I doing wrong?

您做错的是您使用了动画计时器。你永远不应该那样做。你的第一选择应该是:使用真实的动画!这样,无论发生什么情况,动画服务器都会为您处理这件事。