亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS仿新聞tab標題欄效果

2019-10-21 18:40:52
字體:
來源:轉載
供稿:網友

iOS仿網易新聞之類的滑動標題欄,供大家參考,具體內容如下

預覽

iOS,tab,標題欄

思路

兩個scorllview,一個用于標題欄,一個擁有底下的page
標題欄文字和效果切換,漸變色和大小都是根據底下的page偏移量來歸一化換算的
小橫線直接加載標題欄所在的scorllview里面,小橫線自身要有局部偏移,根據page來切換
標題欄的居中需要算一個scrollview的偏移量,小橫線跟著scorllview偏移
監聽scrollview的滑動和停止滑動進行相應的處理

- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view. [self createTitleScrollView]; [self createButtonLine]; [self createContentScrollview];} #pragma mark - 初始化UI- (void)createTitleScrollView{ // 根據是否有導航欄調整坐標 CGFloat marginY = self.navigationController ? self.navigationController.view.frame.size.height : kUpMargin;  // 標題欄,包括小橫線的位置 _titleScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, marginY, kFrameWidth, kTitleHeight + kButtonLineHeight)]; _titleScrollView.showsHorizontalScrollIndicator = NO; _titleScrollView.bounces = NO; _titleScrollView.delegate = self; [self.view addSubview:_titleScrollView];  // 添加button NSArray *titleArray = @[@"頭條", @"社會", @"財經", @"科技", @"體育", @"娛樂", @"時尚", @"軍事", @"教育", @"游戲"]; _pageCount = titleArray.count; _titleScrollView.contentSize = CGSizeMake(kButtonWidth * _pageCount, kTitleHeight); for (int i = 0; i < _pageCount; i++) {  UIButton *titleBtn = [[UIButton alloc] initWithFrame:CGRectMake(kButtonWidth * i, 0, kButtonWidth, kTitleHeight)];  [titleBtn setTitle:titleArray[i] forState:UIControlStateNormal];  [titleBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];  titleBtn.titleLabel.font = [UIFont systemFontOfSize:16];  [titleBtn addTarget:self action:@selector(titleButtonClicked:) forControlEvents:UIControlEventTouchDown];  titleBtn.tag = 1000 + i; // button做標記,方便后面索引,為了不出沖突,就把這個數值設得大一些  [_titleScrollView addSubview:titleBtn]; };} - (void)createButtonLine{ // 初始時刻停在最左邊與按鈕對齊 _buttonLine = [[UIView alloc] initWithFrame:CGRectMake(0, kTitleHeight, kButtonWidth, kButtonLineHeight)]; _buttonLine.backgroundColor = [UIColor redColor]; // 小橫線加載scrollview上才能跟隨button聯動 [_titleScrollView addSubview:_buttonLine];} - (void)createContentScrollview{ CGFloat marginY = self.navigationController ? self.navigationController.view.frame.size.height : kUpMargin;  // 添加內容頁面 _contentScrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, marginY + kTitleHeight + kButtonLineHeight, kFrameWidth, kFrameHeight - marginY - kTitleHeight - kButtonLineHeight)]; _contentScrollview.pagingEnabled = YES; _contentScrollview.bounces = NO; _contentScrollview.contentSize = CGSizeMake(kFrameWidth * _pageCount, kFrameHeight - marginY - kTitleHeight); _contentScrollview.showsHorizontalScrollIndicator = NO; _contentScrollview.delegate = self; [self.view addSubview:_contentScrollview];  // 添加分頁面 for (int i = 0; i < _pageCount; i++) {  PageViewController *pageViewController = [[PageViewController alloc] init];  UIButton *button = [_titleScrollView viewWithTag:1000 + i];  pageViewController.title = button.currentTitle;  pageViewController.view.frame = CGRectMake(kFrameWidth * i, 0, kFrameWidth, kFrameHeight - marginY - kTitleHeight);  [_contentScrollview addSubview:pageViewController.view]; }  // 初始化后選中某個欄目 [self titleButtonClicked:[_titleScrollView viewWithTag:1000 + 0]];} #pragma mark - 標題button點擊事件- (void)titleButtonClicked:(UIButton *)sender{ // 根據點擊的button切換頁面和偏移 printf("%s clicked/n", sender.currentTitle.UTF8String);  // 以下不用了,因為scroll切換會自動處理好尺寸和顏色了// for (int i = 0; i < _pageCount; i++)// {//  UIButton *button = [_titleScrollView viewWithTag:1000 + i];//  // 重置button尺寸顏色//  button.transform = CGAffineTransformMakeScale(1, 1);//  [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];// }  // 強調被選中的button // 放大聚焦 sender.transform = CGAffineTransformMakeScale(kMaxTitleScale, kMaxTitleScale); // 變色 [sender setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];  // 居中title [self settleTitleButton:sender];  // 帶動畫切換到對應的內容,會觸發scrollViewDidScroll NSInteger pageIndex = sender.tag - 1000; [_contentScrollview setContentOffset:CGPointMake(kFrameWidth * pageIndex, 0) animated:YES];} #pragma mark - scrollview滑動事件- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ // 根據content內容偏移調整標題欄 if (scrollView == _titleScrollView) {  printf("title moved/n");     } else if (scrollView == _contentScrollview) {  printf("content moved/n");    // 獲得左右兩個button的索引, 注意最后取整  CGFloat offsetX = scrollView.contentOffset.x;  NSInteger leftTitleIndex = offsetX / kFrameWidth;  NSInteger rightTitleIndex = leftTitleIndex + 1;  // 因為設置了到邊不能滑動,所以不考慮邊界  UIButton *leftTitleButton = [_titleScrollView viewWithTag:1000 + leftTitleIndex];  UIButton *rightTitleButton = [_titleScrollView viewWithTag:1000 + rightTitleIndex];    // 設置大小和顏色漸變以及小橫線的聯動  // 權重因子 0~1 小數, 左邊和右邊互補  CGFloat rightTitleFactor = offsetX / kFrameWidth - leftTitleIndex;  CGFloat leftTitleFactor = 1 - rightTitleFactor;    // 尺寸  CGFloat maxExtraScale = kMaxTitleScale - 1;  leftTitleButton.transform = CGAffineTransformMakeScale(1 + leftTitleFactor * maxExtraScale, 1 + leftTitleFactor * maxExtraScale);  rightTitleButton.transform = CGAffineTransformMakeScale(1 + rightTitleFactor * maxExtraScale, 1 + rightTitleFactor * maxExtraScale);  // 顏色  UIColor *leftTitleColor = [UIColor colorWithRed:0 green:leftTitleFactor blue:0 alpha:1];  UIColor *rightTitleColor = [UIColor colorWithRed:0 green:rightTitleFactor blue:0 alpha:1];  [leftTitleButton setTitleColor:leftTitleColor forState:UIControlStateNormal];  [rightTitleButton setTitleColor:rightTitleColor forState:UIControlStateNormal];  // 小橫線位移  _buttonLine.frame = CGRectMake(kButtonWidth * (leftTitleIndex + rightTitleFactor), _buttonLine.frame.origin.y, kButtonWidth, kButtonLineHeight); }} - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ // 內容區塊滑動結束調整標題欄居中 if (scrollView == _contentScrollview) {  // 取得索引值  NSInteger titleIndex = scrollView.contentOffset.x / kFrameWidth;  // title居中  [self settleTitleButton:[_titleScrollView viewWithTag:1000 + titleIndex]]; }} #pragma mark - 標題按鈕和橫線居中偏移- (void)settleTitleButton:(UIButton *)button{ // 標題 // 這個偏移量是相對于scrollview的content frame原點的相對對標 CGFloat deltaX = button.center.x - kFrameWidth / 2; // 設置偏移量,記住這段算法 if (deltaX < 0) {  // 最左邊  deltaX = 0; } CGFloat maxDeltaX = _titleScrollView.contentSize.width - kFrameWidth; if (deltaX > maxDeltaX) {  // 最右邊不能超范圍  deltaX = maxDeltaX; } [_titleScrollView setContentOffset:CGPointMake(deltaX, 0) animated:YES]; }

源代碼下載

github:仿網易新聞tab效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品一区精品二区| 日韩国产中文字幕| 国产日韩在线播放| 国产经典一区二区| 欧美高清在线观看| 久久这里只有精品视频首页| 精品久久久久久久久久久久| 日韩国产中文字幕| 久久久久久久一区二区三区| 亚洲精品国产品国语在线| 色999日韩欧美国产| 97视频在线观看视频免费视频| 久久久久中文字幕2018| 久久久久久亚洲精品| 久久综合久久美利坚合众国| 日韩的一区二区| 国产精品丝袜久久久久久高清| 91精品国产综合久久香蕉最新版| 91免费电影网站| 国产精品一区二区三区在线播放| 黑人巨大精品欧美一区二区一视频| 亚洲一区二区久久久久久| 亚洲第一福利网站| 久久亚洲精品中文字幕冲田杏梨| 亚洲免费中文字幕| 日韩电影在线观看中文字幕| 蜜月aⅴ免费一区二区三区| 国产成人精品在线| 久久久久久久久久久久久久久久久久av| 好吊成人免视频| 日韩成人在线视频| 国产免费观看久久黄| 日本国产一区二区三区| 亚洲天堂免费视频| 国产精品久久久久久久app| 欧美大尺度激情区在线播放| 日韩大片免费观看视频播放| 欧美成人三级视频网站| 色婷婷综合久久久久中文字幕1| 亚洲欧美在线看| 热99精品里视频精品| 欧美精品制服第一页| 色噜噜亚洲精品中文字幕| 欧美性猛交xxxx乱大交3| 欧美精品久久久久| 欧美性极品少妇精品网站| 日韩在线观看免费全| 777国产偷窥盗摄精品视频| 欧美性生交xxxxx久久久| 欧美黄色性视频| 久久精品国产v日韩v亚洲| 久久男人av资源网站| 97婷婷涩涩精品一区| 久久99视频精品| 欧美亚洲国产成人精品| 日韩麻豆第一页| 国产丝袜精品视频| 国产不卡精品视男人的天堂| 国产成人精品电影| 欧美激情性做爰免费视频| 中文字幕亚洲无线码a| 亚洲一区二区三区视频播放| 日本亚洲欧洲色α| 日韩国产精品亚洲а∨天堂免| 日韩视频免费在线| 国产精品天天狠天天看| 成人黄色影片在线| 国产精品稀缺呦系列在线| 欧美成人激情在线| 国产精品入口日韩视频大尺度| 中文字幕久精品免费视频| 亚洲男人天堂2024| 欧美午夜精品在线| 亚洲精品一区av在线播放| 亚洲专区国产精品| 亚洲天堂成人在线| 自拍偷拍亚洲一区| 欧美激情视频网站| 欧美高清激情视频| 美日韩在线视频| 久久久久久com| 亚洲天堂网站在线观看视频| 国产精品麻豆va在线播放| 国产精品96久久久久久| 成人a级免费视频| 日韩欧美中文第一页| 亚洲精品日韩激情在线电影| 亚洲欧美制服另类日韩| 欧美成人黄色小视频| 国产精品亚发布| 成人精品视频久久久久| 91九色国产社区在线观看| 欧美黑人狂野猛交老妇| 国产日韩专区在线| 国产999精品久久久| 亚洲a∨日韩av高清在线观看| 中文字幕在线日韩| 中文字幕亚洲国产| 欧美肥臀大乳一区二区免费视频| 亚洲黄一区二区| 亚洲综合一区二区不卡| 国产精品久久视频| 国产精品福利无圣光在线一区| 日韩av在线网站| 精品中文视频在线| 中文字幕久热精品在线视频| 在线视频欧美性高潮| 日韩视频免费看| 国产日产亚洲精品| 亚洲国产免费av| 日韩在线视频网| 欧美国产日韩一区二区三区| 永久555www成人免费| 5566日本婷婷色中文字幕97| 亚洲人线精品午夜| 日韩av电影在线网| 国产丝袜精品第一页| 亚洲成人黄色在线观看| 91黑丝高跟在线| 日韩一区二区三区在线播放| 91九色国产在线| 国产精品久久久久久亚洲影视| 亚洲在线视频观看| 北条麻妃一区二区在线观看| 国产日产亚洲精品| 欧美亚洲激情在线| 91亚洲精品一区| 欧美—级a级欧美特级ar全黄| 日韩欧美在线看| 日韩最新在线视频| 亚洲天堂网站在线观看视频| 国产精品白嫩初高中害羞小美女| 激情亚洲一区二区三区四区| 欧美日本在线视频中文字字幕| 成人综合网网址| 国产美女精品视频| 欧美在线视频导航| 亚洲男人7777| 欧美一级电影免费在线观看| 欧美超级乱淫片喷水| 日韩最新av在线| 日韩精品久久久久| 欧美国产日韩一区二区| 国产精品久久久av| 久久6免费高清热精品| 97婷婷涩涩精品一区| 中文综合在线观看| 欧日韩不卡在线视频| 久久精品国产亚洲精品| 日韩69视频在线观看| 欧美第一黄网免费网站| 亚洲sss综合天堂久久| 91精品国产色综合| 久久久999国产精品| 午夜精品久久久久久99热| 国产999精品| 欧美另类暴力丝袜| 欧美野外wwwxxx| 久久综合久久美利坚合众国| 国产成人一区三区| 色偷偷噜噜噜亚洲男人的天堂| 久久97精品久久久久久久不卡| 亚洲精品短视频| 亚洲美女在线看|