- (void)tileLabelsFromMinX:(CGFloat)minimumVisibleX toMaxX:(CGFloat)maximumVisibleX { // the upcoming tiling logic depends on there already being at least one label in the visibleLabels array, so // to kick off the tiling we need to make sure there's at least one label if ([self.visibleLabels count] == 0) { [self placeNewLabelOnRight:minimumVisibleX]; } // add labels that are missing on right side UILabel *lastLabel = [self.visibleLabels lastObject]; CGFloat rightEdge = CGRectGetMaxX([lastLabel frame]); while (rightEdge < maximumVisibleX) { rightEdge = [self placeNewLabelOnRight:rightEdge]; } // add labels that are missing on left side UILabel *firstLabel = self.visibleLabels[0]; CGFloat leftEdge = CGRectGetMinX([firstLabel frame]); while (leftEdge > minimumVisibleX) { leftEdge = [self placeNewLabelOnLeft:leftEdge]; } // remove labels that have fallen off right edge lastLabel = [self.visibleLabels lastObject]; while ([lastLabel frame].origin.x > maximumVisibleX) { [lastLabel removeFromSuperview]; [self.visibleLabels removeLastObject]; lastLabel = [self.visibleLabels lastObject]; } // remove labels that have fallen off left edge firstLabel = self.visibleLabels[0]; while (CGRectGetMaxX([firstLabel frame]) < minimumVisibleX) { [firstLabel removeFromSuperview]; [self.visibleLabels removeObjectAtIndex:0]; firstLabel = self.visibleLabels[0]; } }
- (void)tileLabelsFromMinX:(CGFloat)minimumVisibleX toMaxX:(CGFloat)maximumVisibleX { // the upcoming tiling logic depends on there already being at least one label in the visibleLabels array, so // to kick off the tiling we need to make sure there's at least one label if ([self.visibleLabels count] == 0) { [self placeNewLabelOnRight:minimumVisibleX]; } // add labels that are missing on right side UILabel *lastLabel = [self.visibleLabels lastObject]; CGFloat rightEdge = CGRectGetMaxX([lastLabel frame]); while (rightEdge < maximumVisibleX) { rightEdge = [self placeNewLabelOnRight:rightEdge]; } // add labels that are missing on left side UILabel *firstLabel = self.visibleLabels[0]; CGFloat leftEdge = CGRectGetMinX([firstLabel frame]); while (leftEdge > minimumVisibleX) { leftEdge = [self placeNewLabelOnLeft:leftEdge]; } // remove labels that have fallen off right edge lastLabel = [self.visibleLabels lastObject]; while ([lastLabel frame].origin.x > maximumVisibleX) { [lastLabel removeFromSuperview]; [self.visibleLabels removeLastObject]; lastLabel = [self.visibleLabels lastObject]; } // remove labels that have fallen off left edge firstLabel = self.visibleLabels[0]; while (CGRectGetMaxX([firstLabel frame]) < minimumVisibleX) { [firstLabel removeFromSuperview]; [self.visibleLabels removeObjectAtIndex:0]; firstLabel = self.visibleLabels[0]; } }