实现过程
错误方向
一开始打算在使用tableview的cell中加载scrollview实现,然后发现非常吃内存,而且无法实时变化,背景图片每次在拖动结束后才会改变,尽管方法实现在scrollViewDidScroll
内,依然毫无卵用,遂毙了
正确方向-目前
将图片设置在self.view上后添加tableview
self.bkimv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"001"]]; self.originalHeight = self.bkimv.bounds.size.height*(ScreenWidth*IMAGESCALE/self.bkimv.bounds.size.width); self.originalWidth = ScreenWidth*IMAGESCALE; self.bkimv.bounds = CGRectMake(0, 0, self.originalWidth, self.originalHeight);复制代码
self.table.backgroundColor = [UIColor clearColor]; [self.view addSubview:self.table];复制代码
给予作为广告的cell一个背景色透明,使该cell能够显示图片
///根据编辑状态变化 if (model.isShow) { self.contentView.backgroundColor = [UIColor clearColor]; self.nameLabel.text = @""; }else { self.contentView.backgroundColor = [UIColor whiteColor]; self.nameLabel.text = model.name; }复制代码
在scrollViewDidScroll
内实现图片位置的计算
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat w = self.originalWidth;//图片宽度 CGFloat h = self.originalHeight;//图片高度 CGFloat x = ScreenWidth/2;//中心点x坐标 CGFloat y = scrollView.contentOffset.y/2+self.originalHeight/3;//中心点y坐标 CGFloat scale = 1;//图片移动时比例变化率 if (ISSETSCALE) { scale = (1-scrollView.contentOffset.y/ScreenHeight); } NSIndexPath *path= [NSIndexPath indexPathForRow:8 inSection:0]; CGRect rectInTableView = [self.table rectForRowAtIndexPath:path]; CGRect rectInSuperview = [self.table convertRect:rectInTableView toView:[self.table superview]]; //cell相对于屏幕位置 NSLog(@"%f %f %f",scale, y , rectInSuperview.origin.y); self.bkimv.center = CGPointMake(x, y); if (rectInSuperview.origin.y <= (y-h*scale/2)) { //广告cell到达图片最上部时使图片与cell同时移动 self.bkimv.center = CGPointMake(x, rectInSuperview.origin.y+h*scale/2); } else if ((rectInSuperview.origin.y + ADCellHeight) >= (y+h*scale/2)) { //广告cell到达图片最底部时使图片与cell同时移动 self.bkimv.center = CGPointMake(x, (rectInSuperview.origin.y + ADCellHeight)-h*scale/2); } else { self.bkimv.bounds = CGRectMake(0, 0, w*scale, h*scale); }}复制代码
OVER
顺便图片暴露死宅属性
不说了我的肥宅快乐水快没气了