最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS實現(xiàn)點擊狀態(tài)欄自動回到頂部效果詳解

 更新時間:2016年09月06日 09:17:13   作者:鯤鵬DP  
在IOS開發(fā)過程中,經(jīng)常會有這種需求,需要通過點擊狀態(tài)欄返回到頂部,給用戶更好的體驗效果,下面這篇文章給大家詳細介紹了實現(xiàn)過程,有需要的可以參考借鑒。

前言

大家都知道實現(xiàn)狀態(tài)欄(statusBar)點擊自動回到頂部效果,旨在為用戶在瀏覽界面時提供便利,點擊狀態(tài)欄能夠快速回到界面頂部,所以主要針對可以滾動的UIScrollView和其子類UITableVIewUICollectionView

這里將從以下幾個方面實現(xiàn)該功能。

1.蘋果自帶功能

分析:

首先,蘋果自己已經(jīng)提供了該功能,往上滑動tabView,點擊statusBar,tableView會自動回到初始位置。如下圖所示,此時點擊statusBar,屏幕最上方顯示的將是第一個cell。在一個控制器上添加一個tabView,那么默認點擊statusBar是可以自動回到頂部的。


既然蘋果已經(jīng)提供了該功能,我們直接拿來用就好了,干嘛還要自己實現(xiàn)呢?

其實不然,在一些情況下該功能是無效的。比如,在窗口上同時存在兩個或兩個以上UIScrollView或其子類時。例如,將上面的tabView先添加到一個scrollView上,然后再將該scrollView添加到控制器的View上,此時點擊statusBar,tabView不能自動回到頂部。

因為,該效果是否有效,與 scrollsToTop屬性相關(guān)。查看官方文檔,以下幾點值得注意:

      1.默認情況下scrollsToTop是為YES的,只有當該屬性為YES時,點擊statusBar才有效。

      2.該效果是讓距離statusBar最近的ScrollView自動回到頂部

      3.在iPhone屏幕上方,當存在多個ScrollView(或其子類),如果scrollsToTop= YES ScrollView超過一個,所有ScrollView都不會響應(yīng)statusBar的點擊。

小結(jié):

從上面分析我們可以得出結(jié)論:我們必須保證窗口上scrollsToTop == YESScrollView(及其子類)同一時間內(nèi)有且只有一個。這一樣才能保證點擊statusBar,該唯一存在的ScrollView能自動回到頂部。

如何保證蘋果自帶的該功能一直好使呢?

解決辦法:我們希望回到頂部的ScrollViewscrollsToTop =YES,其他scrollsToTop = NO。

有時,為了滿足某種需求,我們在一個scrollView上面會添加多個TabView,實現(xiàn)上下滑動顯示cell的不同內(nèi)容,左右滑動可以切換不同的tabView,這時點擊statusBar是沒有效果的。因為所有的scrollViewscrollsToTop =YES。要想展示每個TableView時,點擊statusBar都有效,必須讓除了展示在最上面的TabView以外的所有的ScrollViewscrollsToTop =NO。這就需要去判斷,到底顯示的是哪一個TabView。

參考代碼如下:

1.讓最下面的scrollView,scrollsToTop =NO。其他TableView都是該scrollView的子類。

2.遍歷判斷

 // 控制scrollView的scrollsToTop屬性
 for (NSInteger i = 0; i < self.childViewControllers.count; i++) {
  UIViewController *childVc = self.childViewControllers[i];

  // 如果控制器的view沒有被創(chuàng)建,跳過
  if (!childVc.isViewLoaded) continue;

  // 如果控制器的view不是scrollView,就跳過
  if (![childVc.view isKindOfClass:[UIScrollView class]]) continue;

  // 如果控制器的view是scrollView
  UIScrollView *scrollView = (UIScrollView *)childVc.view;
  scrollView.scrollsToTop = (i == index);
 }

2.自己實現(xiàn)

statusBar的區(qū)域添加一個遮蓋,監(jiān)聽遮蓋的點擊事件。

UIView

首先我們想到用UIView來做這個遮蓋。但是,在這里我們使用UIView是著不住statusBar的,UIView會一直在statusBar的下面,所以不能接收點擊事件。因為statusBar其實是一個UIWindow,且優(yōu)先級高于下面的keyWindow。所以,添加的UIView會在statusBar的下面。


UIWindow

由于優(yōu)先級的關(guān)系,我們可以用一個UIWindow來做遮蓋,設(shè)置遮蓋window的優(yōu)先級高于statusBar即可。當然,設(shè)置最高優(yōu)先級(UIWindowLevelAlert)肯定是可以的。然后給遮蓋Window添加一個點擊事件,背景色設(shè)置透明即可。


 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

  UIWindow * coverWindow =[[UIWindow alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
  self.coverWindow = coverWindow;
  coverWindow.hidden = NO;
  coverWindow.backgroundColor = [UIColor redColor];
  coverWindow.windowLevel = UIWindowLevelAlert;
  //添加手勢
  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(coverWindowClick)];
  [self.coverWindow addGestureRecognizer:tap];
 });
- (void)coverWindowClick {
 [UIView animateWithDuration:0.5 animations:^{

  self.tableView.contentOffset = CGPointMake(0, 0);
 }];
}

AppDelegate中直接監(jiān)聽statusBar的點擊

AppDelegate中實現(xiàn)touchesBegan:方法

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
  if ([touches.anyObject locationInView:nil].y > 20) return;
 [[NSNotificationCenter defaultCenter]postNotificationName:@"click" object:nil];

}

接收通知,修改tabViewcontentOffset

- (void)coverWindowClick {
 [UIView animateWithDuration:0.5 animations:^{

  self.tableView.contentOffset = CGPointMake(0, 0);
 }];
}

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望對大家開發(fā)IOS能有所幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • IOS 開發(fā)之ios視頻截屏的實現(xiàn)代碼

    IOS 開發(fā)之ios視頻截屏的實現(xiàn)代碼

    這篇文章主要介紹了IOS 開發(fā)之ios視頻截屏的實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • iOS開發(fā)之Quartz2D的介紹與使用詳解

    iOS開發(fā)之Quartz2D的介紹與使用詳解

    什么是Quartz2D?Quartz 2D是一個二維繪圖引擎,同時支持iOS和Mac系統(tǒng)。下面這篇文章主要介紹了iOS開發(fā)之Quartz2D的介紹與使用的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解

    iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解

    這篇文章主要為大家介紹了iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • iOS實現(xiàn)可以縱向橫向滑動的表格實例代碼

    iOS實現(xiàn)可以縱向橫向滑動的表格實例代碼

    這篇文章主要給大家介紹了利用iOS實現(xiàn)可以縱向橫向滑動的表格的相關(guān)資料,文中給出了詳細的實現(xiàn)方法示例代碼,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • iOS中創(chuàng)建Model的最佳實踐記錄

    iOS中創(chuàng)建Model的最佳實踐記錄

    這篇文章主要給大家介紹了關(guān)于iOS中創(chuàng)建Model的最佳實踐,文中通過示例代碼介紹的非常詳細,對大家學習或者使用iOS具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • iOS開發(fā)之UIPickerView實現(xiàn)城市選擇器的步驟詳解

    iOS開發(fā)之UIPickerView實現(xiàn)城市選擇器的步驟詳解

    這篇文章給大家介紹iOS利用控件UIPickerView實現(xiàn)城市選擇器的效果,選擇城市這一功能相信在大家日常開發(fā)的時候經(jīng)常遇見,下面就來看看詳細的實現(xiàn)過程,有需要的可以參考借鑒。
    2016-09-09
  • iOS開發(fā)中指紋識別簡單介紹

    iOS開發(fā)中指紋識別簡單介紹

    指紋識別是在iOS8.0以后才推出的,所以我們?nèi)绻氚阎讣y集成到我們的APP當中,我們首先就要在代碼中判斷iOS版本。接下來通過本文給大家分享iOS開發(fā)中指紋識別簡單介紹,需要的朋友參考下吧
    2017-11-11
  • iOS無障礙適配西瓜視頻Voice?Over實踐示例

    iOS無障礙適配西瓜視頻Voice?Over實踐示例

    本文從研發(fā)的視角出發(fā),講述了如何使用?Voice?Over、如何適配?Voice?Over?以及適配過程中如果遇到問題應(yīng)該如何解決。希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 判斷iPhone的WiFi是否打開的兩種方法

    判斷iPhone的WiFi是否打開的兩種方法

    大家都知道判斷WiFi是否連接可以使用Reachability進行判斷,那么wifi是否打開應(yīng)該怎么判斷呢?下面小編給大家分享兩種完全基于不同思路的方法,需要的朋友參考下
    2016-11-11
  • IOS開發(fā)之路--C語言指針

    IOS開發(fā)之路--C語言指針

    指針是C語言的精髓,但是很多初學者往往對于指針的概念并不深刻,以至于學完之后隨著時間的推移越來越模糊,感覺指針難以掌握,本文通過簡單的例子試圖將指針解釋清楚
    2014-08-08

最新評論

昌都县| 吕梁市| 阿拉善右旗| 即墨市| 临澧县| 武鸣县| 阳春市| 郸城县| 乐清市| 依安县| 滦平县| 云龙县| 津市市| 辽中县| 青龙| 康定县| 石门县| 涟源市| 临颍县| 绥化市| 鹤岗市| 霍城县| 元阳县| 潢川县| 塘沽区| 洱源县| 慈溪市| 甘孜| 普格县| 缙云县| 伊宁县| 汝南县| 南涧| 旌德县| 荥经县| 阜平县| 浏阳市| 华亭县| 永丰县| 佛冈县| 会理县|