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

IOS仿今日頭條滑動(dòng)導(dǎo)航欄

 更新時(shí)間:2016年01月28日 15:22:11   作者:小崔  
今天仿今日頭條滑動(dòng)導(dǎo)航和網(wǎng)易首頁導(dǎo)航封裝類優(yōu)化相似,這個(gè)也是解決手勢沖突,UIPanGestureRecognizer與ScrollView的手勢沖突

之前在腳本之家平臺給大家分享了網(wǎng)易首頁導(dǎo)航封裝類、網(wǎng)易首頁導(dǎo)航封裝類優(yōu)化,今天在前兩個(gè)的基礎(chǔ)上仿下今日頭條。

1.網(wǎng)易首頁導(dǎo)航封裝類中主要解決了上面導(dǎo)航的ScrollView和下面的頁面的ScrollView聯(lián)動(dòng)的問題,以及上面導(dǎo)航欄的便宜量。

2.網(wǎng)易首頁導(dǎo)航封裝類優(yōu)化中主要解決iOS7以上滑動(dòng)返回功能中UIScreenEdgePanGestureRecognizer與ScrollView的滑動(dòng)的手勢沖突問題。

今天仿今日頭條滑動(dòng)導(dǎo)航和網(wǎng)易首頁導(dǎo)航封裝類優(yōu)化相似,這個(gè)也是解決手勢沖突,UIPanGestureRecognizer與ScrollView的手勢沖突。

一、ViewController的層次

用上面的圖來介紹,左側(cè)的個(gè)人頁面ViewController上面通過addChildViewController添加了一個(gè)以MainViewController為RootViewController的

UINavigationController,通過addSubview將UINavigationController的View添加到個(gè)人頁面ViewController的View上。

二、仿今日頭條滑動(dòng)導(dǎo)航主要有3個(gè)問題:

1.UIPanGestureRecognizer與ScrollView的手勢沖突

為了達(dá)到拖動(dòng)滑動(dòng)的效果,需要給MainViewController添加一個(gè)UIPanGestureRecognizer,由于底部是ScrollView和TableView組成的,所以會(huì)使UIPanGestureRecognizer與底部的沖突,和網(wǎng)易首頁導(dǎo)航封裝類優(yōu)化類似需要在

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer中根據(jù)gestureRecognizer返回YES來使ScrolView和UIPanGestureRecognizer都識別。

2.UIPanGestureRecognizer滑動(dòng)結(jié)束的位置不正確

用UIPanGestureRecognizer滑動(dòng)根據(jù)便宜量來改變UINavigationController的View的位置,在今日頭條中滑動(dòng)結(jié)束時(shí)UINavigationController的View要么在原位要么在右側(cè),不會(huì)停在中間,這個(gè)問題讓我想起了之前做的果凍效果,手勢有狀態(tài)state,根據(jù)手勢的狀態(tài)來改變UINavigationController的View的位置,特別是在手勢結(jié)束時(shí)。

3.由于1使ScrolView和UIPanGestureRecognizer都識別,導(dǎo)致返回時(shí)ScrolView也會(huì)滑動(dòng)

讓底部的ScrolView能滑動(dòng)的時(shí)間應(yīng)該是UINavigationController的View在初始位置frame的x為0,所以在它的frame的x>0時(shí),底部的bottomScrollView的scrollEnabled=NO。

三、 主要實(shí)現(xiàn)代碼(導(dǎo)航的代碼就不貼了,只貼主要的)

1.聲明一個(gè)拖動(dòng)手勢

@property(nonatomic,strong) UIPanGestureRecognizer *panGestureRecognizer;

2.為MainViewController添加手勢

_panGestureRecognizer=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGesture:)];
_panGestureRecognizer.delegate=self;
[self.navigationController.view addGestureRecognizer:_panGestureRecognizer]; 

3.手勢識別的方法

//平移
-(void)panGesture:(UIPanGestureRecognizer*)pan
{
//在View中的位置
// CGPoint point=[pan locationInView:self.navigationController.view];
//在View中的移動(dòng)量 以手指按下的為原點(diǎn)
CGPoint point1=[pan translationInView:self.navigationController.view];
if (pan.state==UIGestureRecognizerStateChanged&&pan==_panGestureRecognizer) {
if (point1.x>0&&self.navigationController.view.frame.origin.x<self.navigationController.view.frame.size.width-100) {
float x= self.navigationController.view.frame.origin.x+point1.x>self.navigationController.view.frame.size.width-100?self.navigationController.view.frame.size.width-100:self.navigationController.view.frame.origin.x+point1.x;
self.navigationController.view.frame=CGRectMake(x, self.navigationController.view.frame.origin.y, self.navigationController.view.frame.size.width, self.navigationController.view.frame.size.height);
NSLog(@"%@",NSStringFromCGRect(self.navigationController.view.frame));
}
else if(point1.x<0)
{
NSLog(@"aaa %f",self.navigationController.view.frame.origin.x);
float x=self.navigationController.view.frame.origin.x+point1.x<0?0:self.navigationController.view.frame.origin.x+point1.x;
self.navigationController.view.frame=CGRectMake(x, self.navigationController.view.frame.origin.y, self.navigationController.view.frame.size.width, self.navigationController.view.frame.size.height);
}
}
else if(pan.state==UIGestureRecognizerStateEnded)
{
if (self.navigationController.view.frame.origin.x>self.navigationController.view.frame.size.width/3) {
[UIView animateWithDuration:0.2 animations:^{
self.navigationController.view.frame=CGRectMake(self.navigationController.view.frame.size.width-100, 0, self.navigationController.view.frame.size.width, self.navigationController.view.frame.size.height);
} completion:^(BOOL finished) {
self.bottomScrollView.scrollEnabled=YES;
}];
}
else
{
[UIView animateWithDuration:0.2 animations:^{
self.navigationController.view.frame=CGRectMake(0, 0, self.navigationController.view.frame.size.width, self.navigationController.view.frame.size.height);
} completion:^(BOOL finished) {
self.bottomScrollView.scrollEnabled=YES;
}];
}
}
//偏移量是增加的應(yīng)該設(shè)為0
[pan setTranslation:CGPointZero inView:self.navigationController.view];
}

4.手勢沖突解決

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if (self.bottomScrollView.contentOffset.x<=0.0&&gestureRecognizer==_panGestureRecognizer) {
if (self.navigationController.view.frame.origin.x>0) {
self.bottomScrollView.scrollEnabled=NO;
}
else
{
self.bottomScrollView.scrollEnabled=YES;
}
return YES;
}
return NO;
}

四、效果圖

以上所述是小編給大家分享的IOS仿今日頭條滑動(dòng)導(dǎo)航欄,希望對大家有所幫助。

相關(guān)文章

  • IOS網(wǎng)絡(luò)請求之AFNetWorking 3.x 使用詳情

    IOS網(wǎng)絡(luò)請求之AFNetWorking 3.x 使用詳情

    本篇文章主要介紹了IOS網(wǎng)絡(luò)請求之AFNetWorking 3.x 使用詳情,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • iOS中導(dǎo)航欄的基本使用匯總

    iOS中導(dǎo)航欄的基本使用匯總

    導(dǎo)航欄作為iOS開發(fā)的一大空控件來說,是非常的重要這篇文章主要給大家介紹了關(guān)于iOS中導(dǎo)航欄的基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS之Https自簽名證書認(rèn)證及數(shù)據(jù)請求的封裝原理

    iOS之Https自簽名證書認(rèn)證及數(shù)據(jù)請求的封裝原理

    本篇文章主要介紹了iOS之Https自簽名證書認(rèn)證及數(shù)據(jù)請求的封裝原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • iOS程序性能優(yōu)化的技巧

    iOS程序性能優(yōu)化的技巧

    這篇文章主要介紹了一些優(yōu)化iOS程序性能的技巧,幫助大家更好的進(jìn)行ios開發(fā),感興趣的朋友可以了解下
    2020-09-09
  • iOS實(shí)現(xiàn)換膚功能的簡單處理框架(附源碼)

    iOS實(shí)現(xiàn)換膚功能的簡單處理框架(附源碼)

    這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)換膚功能的簡單處理框架,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • iOS 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組的操作方法

    iOS 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組的操作方法

    這篇文章主要介紹了iOS 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07
  • 詳解iOS按鈕暴力點(diǎn)擊的便捷解決方案

    詳解iOS按鈕暴力點(diǎn)擊的便捷解決方案

    本篇文章主要介紹了iOS按鈕暴力點(diǎn)擊的便捷解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • iOS文件預(yù)覽分享小技能示例

    iOS文件預(yù)覽分享小技能示例

    這篇文章主要為大家介紹了iOS文件預(yù)覽分享小技能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • iOS runtime forwardInvocation詳解及整理

    iOS runtime forwardInvocation詳解及整理

    這篇文章主要介紹了 iOS runtime forwardInvocation詳解及整理的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • iOS實(shí)時(shí)錄音和播放功能

    iOS實(shí)時(shí)錄音和播放功能

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)時(shí)錄音和播放功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論

兴业县| 嘉义市| 天峻县| 东安县| 娱乐| 溆浦县| 论坛| 唐山市| 丰顺县| 江达县| 东乌珠穆沁旗| 玉环县| 芒康县| 南充市| 犍为县| 马龙县| 托里县| 吴桥县| 永年县| 旬阳县| 布尔津县| 瓦房店市| 赞皇县| 中卫市| 新津县| 周口市| 平阳县| 搜索| 乌兰县| 新化县| 天台县| 玉树县| 卫辉市| 文水县| 墨脱县| 大埔县| 库伦旗| 宣汉县| 建湖县| 哈巴河县| 平远县|