91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中如何仿寫UIScrollView部分功能

發布時間:2021-08-20 11:46:25 來源:億速云 閱讀:237 作者:小新 欄目:移動開發

這篇文章主要介紹了iOS中如何仿寫UIScrollView部分功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

先展示下效果圖

iOS中如何仿寫UIScrollView部分功能

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

其實,frame設置的是其展示區域,就像電視機的顯示屏。而bounds設置的是其內容區域,就像電視機放映的電影中那個廣闊的世界一樣。對于這部分的理解,我想結合scrollView會更容易些。scrollView的frame設置的僅僅只是scrollView的展示界面,而其滑動區域需要設置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));
}

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

仿寫UIScrollView的部分效果

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

效果圖

iOS中如何仿寫UIScrollView部分功能

代碼

- (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的內容
  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;

  // 復位
  [gesture setTranslation:CGPointZero inView:myScrollView];
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“iOS中如何仿寫UIScrollView部分功能”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸州市| 望江县| 阿城市| 四川省| 金阳县| 京山县| 安泽县| 白银市| 定襄县| 广东省| 新巴尔虎左旗| 略阳县| 南通市| 宜兰市| 湘乡市| 凌源市| 宝兴县| 乃东县| 报价| 张北县| 屏南县| 县级市| 巩留县| 宽城| 综艺| 竹北市| 化州市| 偃师市| 蒙阴县| 镇江市| 乌审旗| 林周县| 洪湖市| 故城县| 梁河县| 旌德县| 民乐县| 罗定市| 博客| 阿巴嘎旗| 湘潭县|