There is a fancy solution to present the scrolling position of a tableview to the user using moving image as a background. The user can better imagine the size of the table view because the background image suggest where he/she is in the tableview.
How-To – short version
- Add a tableview
 - create a scrollview with an imageview which size and contentSize is the same as the tableview
 - add the scrollview as a background view of the tableview
 - set the tableview to transparent
 - Good To Know: the TableView is a ScrollView so you can handle all ScrollViewDelegate related methods. Just simply implement the ScrollView delegate methods where you implemented the TableViewDelegate methods: catch the tableview’s scrolling event and position the scroll position of the background scrollview accordingly
 
How-To – detailed version
First, in the ViewDidLoad of your ViewController load the appropriate image, create an image view which presents it and add the ImageView as the subview of your ScrollView:
- (UIView *)createBackgroundScrollViewWithFrame:(CGRect)tableViewFrame {
    // set up the image view, select a long image
    UIImage *img = [UIImage imageNamed:kImageName];
    // create image view with the image, the size should be long enough for the scroll
    UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
    imgView.contentMode = UIViewContentModeScaleToFill;
    imgView.frame = CGRectMake(0,0, tableViewFrame.size.width, img.size.height);
    // set up the background scroll view and add the image view
    UIScrollView *backgroundScrollView = [[UIScrollView alloc] initWithFrame:tableViewFrame];
    backgroundScrollView.userInteractionEnabled = NO;
    backgroundScrollView.contentSize = imgView.frame.size;
    [backgroundScrollView addSubview:imgView];
    return backgroundScrollView;
}
Second, set the ScrollView as the backgroundView of your tableView:
    // set the scroll view as the background view of the tableview
    myTableView.backgroundView = [self createBackgroundScrollViewWithFrame:theTableView.bounds];
Third, don’t forget to set the background color of the cells to clearColor if you use the tableView in grouped mode:
cell.backgroundColor = [UIColor clearColor];
Fourth implement the appropriate ScrollViewDelegate method of the TableView (scrollViewDidScroll). Notice that I modified the parameter to UITableView instead of UIScrollView. This is not necessary but makes to code more clear and you don’t have to cast a lot. We should calculate the correct position by the proportion of the contentSize of the TableView and the ScrollView.
// cheat a bit: modify the parameter to UITableView from UIScrollView
- (void)scrollViewDidScroll:(UITableView *)aTableview {
    if (aTableview != myTableView) {
        return;
    }
    UIScrollView *backgroundScrollView = (UIScrollView*)aTableview.backgroundView;
    // calculate the position of the scroll regarding to the position of the tableview
    float diffTableView = aTableview.contentSize.height - aTableview.frame.size.height;
    if (diffTableView>0) {
        float diffScroll = backgroundScrollView.contentSize.height - backgroundScrollView.frame.size.height;
        float newOffset = aTableview.contentOffset.y * (diffScroll/diffTableView);
        backgroundScrollView.contentOffset = CGPointMake(backgroundScrollView.contentOffset.x, newOffset);
    }
}
Notes: The image should be long enough to see the correct effect.
If you put a frame around your content you should play with margins and spacings: you have to set up a header and footer and indent of each cell.
If you use sections take care of indenting the sections as well. You can achieve by implementing the tableView:viewForHeaderInSection and return a UIView which contains a UILabel indenting appropriately.
You can set a semitransparent background color for each cell and/or you can use a faded image.
Download the sample project:
