UITableView can scroll background view

UITableView的backgroundView属性可以设置其背景,但是背景不能随Table的拖动而移动,也就是固定不移动的。有没有办法让其背景也随拖动而移动呢。深入研究了一下UITableView api,好像没有提供这样的api。难道不能实现? google了一天也没有得到好的解决办法。  已经半夜一点过了,问题还没解决,睡不着啊。不知道是不是程序员的灵感时段总是在半夜,在半夜两点的时候,我突然想到了一个办法,试一试给UITableView加一层background layer as background view。于是试了一试,还真有点眉目了。顿时激动了(注意不是鸡动)大笑,看来上天眷顾我,这下可以睡个程序员的美容睡了。

 

原理就是在UITableView的layer加一层image的layer作为背景。代码如下:

 

  1. CALayer *bgLayer = [CALayer layer];  
  2. bgLayer.contents = (id)[UIImage imageNamed:@"setting-main-bg"].CGImage;  
  3. bgLayer.anchorPoint = CGPointZero;  
  4. bgLayer.bounds = CGRectMake(0, 0,  
  5.                             self.scrollBgTableView.contentSize.width ,  
  6.                             self.scrollBgTableView.contentSize.height + 50);  
  7. CGRect rect = bgLayer.frame;  
  8. rect.origin.y = -50;  
  9. bgLayer.frame = rect;  
  10.   
  11. [self.scrollBgTableView.layer addSublayer:bgLayer];  
  12. bgLayer.zPosition = -5; //这一句一定要,数值得小于0都可以  

 

scrollBgTableViewj是UITableView类型。在这儿提醒最重要的一步,记得将UITableView的backgroundColor设为clearColor, 不然上面加的图层将被backgroundColor图层覆盖。

 

  1. scrollBgTableView.backgroundColor = [UIColor clearColor];  

 

UITableView还有一个比较有用的功能,就是移动列表在Scroll中的位置。如:

 

  1. [self.scrollBgTableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];  


文字表达不清楚,大家可以用这句代码设置自己的UITableView试试,就知道它的作用了。

 

 

 

有了上面两个知识点,那么就可以做一个可移动的背景了。 下面我手把手教大家如何实现,每一步都必不可少,看清楚了。

 

1.  set the background of the UITableView to clear Color

 

  1. scrollBgTableView.backgroundColor = [UIColor clearColor];  


2. add image layer as the background layer

 

 

  1. CALayer *bgLayer = [CALayer layer];  
  2. bgLayer.contents = (id)[UIImage imageNamed:@"setting-main-bg"].CGImage;  
  3. bgLayer.anchorPoint = CGPointZero;  
  4. bgLayer.bounds = CGRectMake(0, 0,  
  5.                             self.scrollBgTableView.contentSize.width ,  
  6.                             self.scrollBgTableView.contentSize.height + 50);  
  7. CGRect rect = bgLayer.frame;  
  8. rect.origin.y = -50;  
  9. bgLayer.frame = rect;  
  10.   
  11. [self.scrollBgTableView.layer addSublayer:bgLayer];  
  12. bgLayer.zPosition = -5; //这一句一定要,数值得小于0都可以  


好了,如果不行,那只有发源码工程出来了。微笑

 

 

源码下载

posted @ 2012-04-11 00:14  jprothwell  阅读(451)  评论(0编辑  收藏  举报