回头看UITableView(二)-父视图UIScrollView

题目早早就定下了,现在想填充内容了,踌躇中却不知道从哪里开始了。
窗外突然下起雨来。虽然不愿承认,但夏天确实已经渐去渐远,凉意开始蔓延。索性放空身心,伴着雨声入眠吧。


I'm back!

众所周知,UITableView的父视图就是UIScrollView,UITableView之所以能滚动就是基于UIScrollView的特性,今天咱们就来深入理解一下UIScrollView。

上图:


连续修改bounds属性

打码:

- (IBAction)boundsAction:(UIStepper *)sender {
    self.redView.bounds = CGRectMake(0, sender.value, self.redView.bounds.size.width,   self.redView.bounds.size.height);
    self.boundsLabel.text = [NSString stringWithFormat:@"红色视图bounds%@",NSStringFromCGRect(self.redView.bounds)];
}

我如果说改变bounds的值不用UIStepper实现而是用手势实现,不知道大家有没有种恍然大悟的感觉。

我们再复习一下UIView的frame和bounds是什么。
. frame:当前view在父view坐标体系中的位置和大小
. bounds:当前view的坐标体系,容纳子view的位置和大小
也就说一个view的位置是由当前view的frame和其父view的bounds决定的。

回到上面的红绿视图,你已经看到:改变父view(红色视图)的bounds,子view(绿色视图)的位置就会相应的改变。如果我们给红色视图加一个UIPangestureRecognizer(拖动手势),滑动时根据其代理函数返回的值修改红色视图的bounds就实现了绿色视图的滑动。

再上图:


手势修改bounds

再打码:
- (IBAction)panHandler:(UIPanGestureRecognizer *)sender {
if(sender.state == UIGestureRecognizerStateChanged){
CGFloat distance = -[sender translationInView:sender.view].y;
self.redView.bounds = CGRectMake(0, self.redView.bounds.origin.y+distance, self.redView.bounds.size.width, self.redView.bounds.size.height);
[sender setTranslation:CGPointZero inView:sender.view];
}else if(sender.state == UIGestureRecognizerStateEnded){
self.boundsLabel.text = [NSString stringWithFormat:@"红色视图bounds%@",NSStringFromCGRect(self.redView.bounds)];
}
}

果然图多可以少说话。那么你是不是可以自己手动写个UIScrollView了,如果你敢回答不能我就敢一星期不吃肉。顺便推荐一个录屏软件,个人感觉很好用,直接生成体积较小的gif。地址是http://www.cockos.com/licecap/

当然,对于这个能滑动的视图的始祖,我们要想有强烈的掌控感,还需要了解几个属性。

  1. contentSize
    😓 又要提到上图了,好吧,如上图,contentSize其实就是绿色视图的大小,就是内容空间的大小。在UIScrollView里,当contentSize大于本身的frame.size的时候就可以滚动,否则不允许。
  2. contentOffset
    还是如上图,contentOffset其实就是红色视图的bounds.origin,所以你是否明白为什么当contentOffset的值是正值的时候视图往上,是负值的时候视图往下了吧。
  3. contentInset
    这个属性很难说清楚,所以,那就更应该说了。如果你设置了这个属性后会对内容视图做一个偏移操作,或者说给内容视图添加了留白,比如说我们设置UIScrollView的contentInset为UIEdgeInsetsMake(64, 0, 0, 0)注意第一个参数是top,然后依次是left,bottom,right。那么添加的subview的位置纵坐标的起点就是subview.frame.origin.y+scrollView.contentInset.top(当然这是在不考虑父视图的bounds的情况下)。你也许注意到了一点,我用了位置一词,因为这其实是相对父视图的位置,它的frame并没有改变。
2DCEB800-BB02-4E2D-A58F-25C2247D2F21.png

啊哈哈,
self.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 50, self.scrollView.bounds.size.width, 200)];
view.backgroundColor = [UIColor greenColor];
[self.scrollView addSubview:view];

如图,虽然view的起点是50,但是由于contentInset的原因,它相对于父视图的纵坐标位置是100。

好了,先写到这里,办公室就我一个人了,兄弟我先回家了。

预告:根据上边这些东东,咱们稍后谈谈怎么实现一个自定义的下拉刷新控件,我会尽快更新。
最后,诚心求一个Mac上方便作图的软件。如果你有破解版的sketch的话,给兄弟一个吧,先谢过了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,468评论 1 14
  • UIWindow 初始化: self.window= [[UIWindowalloc]initWithFrame:...
    Sunny_Fight阅读 1,030评论 0 1
  • 记得女儿大四的时候,偶尔在网上看的女儿同学发的帖子,庆幸自己通过了专八考试,我想这时候还没接到女儿报喜的消息,...
    hesiting阅读 346评论 8 4
  • 今天,一位近40岁的从事幼师朋友突然告诉我,她想当培训讲师,具体哪个领域的讲师,还没确定,但唯一确定的是一线幼师的...
    兰子伴你成长阅读 3,279评论 2 21
  • 感赏自己越来越爱自己,越来越热爱生活!感赏自己充满能量…快递给我优惠13块钱!感赏儿子乖乖的,感赏儿子给我礼物,给...
    我就是我hxh阅读 127评论 0 1