国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS bounds學(xué)習(xí)筆記以及仿寫UIScrollView部分功能詳解

2020-07-26 02:19:57
字體:
供稿:網(wǎng)友

經(jīng)常看到這種說法,frame是基于父控件的,bounds是基于自身坐標(biāo)的。然而,這個自身坐標(biāo)是什么?bounds這個屬性存在的意義是什么呢?bounds的x和y值真的永遠是0嗎?

經(jīng)過查閱資料,我看到這樣一種說法:一個控件,擁有其展示部分和內(nèi)容部分。其展示部分是有限大的,固定坐標(biāo)固定大小,而其內(nèi)容部分是無限大的。就像一個電視機以及其播放的電影(這個比喻不太恰當(dāng),是我強行比喻的),電視機用于放映電影的屏幕(控件的展示部分)是固定位置固定大小的,然而電影的世界(控件的內(nèi)容部分)是無限大的,我們只能展示這個無限的內(nèi)容的有限部分。

github上的Demo鏈接

Demo演示bounds

先展示下效果圖

我設(shè)置了兩個view,一個是紅色的背景view,紅色view里嵌套了一個小的藍色的view。我給紅色view添加了點擊手勢,點擊紅色view,讓紅色view bounds.origin.y += 5;,并打印bounds的值。結(jié)果顯示,bounds的y值確實增加了,而實際效果是,藍色小色塊在不斷移動。

其實,frame設(shè)置的是其展示區(qū)域,就像電視機的顯示屏。而bounds設(shè)置的是其內(nèi)容區(qū)域,就像電視機放映的電影中那個廣闊的世界一樣。對于這部分的理解,我想結(jié)合scrollView會更容易些。scrollView的frame設(shè)置的僅僅只是scrollView的展示界面,而其滑動區(qū)域需要設(shè)置contentSize屬性。

- (void)viewDidLoad {  [super viewDidLoad];  // 紅色的背景view  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 200, 200)];  view.backgroundColor = [UIColor redColor];  [self.view addSubview:view];  // 單擊手勢  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewClick:)];  [tap setNumberOfTouchesRequired:1];  [view addGestureRecognizer:tap];  // 藍色的子view  UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 190, 10, 10)];  subView.backgroundColor = [UIColor blueColor];  [view addSubview:subView];}- (void)viewClick:(UITapGestureRecognizer *)gesture{  // 獲取紅色view  UIView *view = gesture.view;  // 修改bounds的值  CGRect bounds = view.bounds;  bounds.origin.y += 5;  view.bounds = bounds;  // 展示bounds的值  NSLog(@"bounds:%@",NSStringFromCGRect(view.bounds));}

關(guān)于修改bounds后,其內(nèi)容的移動規(guī)律,我是這樣理解的。我們都知道,左上角是(0,0),右下角方向移動,x和y都是增加的。而對于bounds,由于一個控件的展示部分被frame固定了,不可以隨意移動。而在上面的例子中,y是自增的,那么控件應(yīng)該相對于內(nèi)容部分向下移動才對(設(shè)置frame是相對于父控件移動,那么設(shè)置bounds就是針對自身的內(nèi)容區(qū)域移動)。而控件是不能移動的,所以能移動的就是內(nèi)容區(qū)域了。內(nèi)容區(qū)域相對控件向相反的方向移動,也就是向上移動了。

仿寫UIScrollView的部分效果

仿寫思路:scrollView的滑動效果,我們可以通過添加滑動手勢實現(xiàn)。scrollView的內(nèi)容滾動,我們可以通過修改scrollView的bounds來實現(xiàn)。

效果圖

代碼

- (void)viewDidLoad {  [super viewDidLoad];  // 仿scrollView  UIView *myScrollView = [[UIView alloc] initWithFrame:self.view.bounds];  myScrollView.backgroundColor = [UIColor redColor];  [self.view addSubview:myScrollView];  // 滑動手勢  UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGes:)];  [myScrollView addGestureRecognizer:pan];  // scrollView的內(nèi)容  UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 10, 10)];  blueView.backgroundColor = [UIColor blueColor];  [myScrollView addSubview:blueView];}- (void)panGes:(UIPanGestureRecognizer *)gesture{  UIView *myScrollView = gesture.view;  // 獲取滑動的位移量  CGPoint transPoint = [gesture translationInView:myScrollView];  NSLog(@"%@",NSStringFromCGPoint(transPoint));  // 這里總感覺寫錯了,我腦子笨,有點繞不過來了。頭疼  CGRect bounds = myScrollView.bounds;  bounds.origin.x -= transPoint.x;  bounds.origin.y -= transPoint.y;  myScrollView.bounds = bounds;  // 復(fù)位  [gesture setTranslation:CGPointZero inView:myScrollView];}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 县级市| 太康县| 康平县| 杂多县| 波密县| 界首市| 申扎县| 巢湖市| 曲阜市| 遂宁市| 昌吉市| 无为县| 滦南县| 兴海县| 新乐市| 通河县| 讷河市| 兴宁市| 东阿县| 会东县| 满城县| 湖州市| 黎平县| 香港| 西丰县| 改则县| 禹城市| 九龙坡区| 阿巴嘎旗| 定州市| 合阳县| 罗江县| 东兰县| 平顶山市| 平果县| 抚州市| 秭归县| 弋阳县| 常熟市| 拜泉县| 定襄县|