iOS中如何仿寫UIScrollView部分功能-創(chuàng)新互聯(lián)

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

蘭山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,蘭山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為蘭山近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的蘭山做網(wǎng)站的公司定做!

先展示下效果圖

iOS中如何仿寫UIScrollView部分功能

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

其實(shí),frame設(shè)置的是其展示區(qū)域,就像電視機(jī)的顯示屏。而bounds設(shè)置的是其內(nèi)容區(qū)域,就像電視機(jī)放映的電影中那個廣闊的世界一樣。對于這部分的理解,我想結(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];

  // 藍(lán)色的子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的滑動效果,我們可以通過添加滑動手勢實(shí)現(xiàn)。scrollView的內(nèi)容滾動,我們可以通過修改scrollView的bounds來實(shí)現(xiàn)。

效果圖

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

  // 這里總感覺寫錯了,我腦子笨,有點(diǎn)繞不過來了。頭疼
  CGRect bounds = myScrollView.bounds;
  bounds.origin.x -= transPoint.x;
  bounds.origin.y -= transPoint.y;
  myScrollView.bounds = bounds;

  // 復(fù)位
  [gesture setTranslation:CGPointZero inView:myScrollView];
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“iOS中如何仿寫UIScrollView部分功能”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標(biāo)題:iOS中如何仿寫UIScrollView部分功能-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://muchs.cn/article22/dsescc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT商城網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、App設(shè)計動態(tài)網(wǎng)站、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)