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

首頁 > 系統 > iOS > 正文

iOS仿新聞tab標題欄效果

2020-07-26 02:26:17
字體:
來源:轉載
供稿:網友

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

預覽

思路

兩個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]; }

源代碼下載

csdn:仿網易新聞tab效果

github:仿網易新聞tab效果

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人性生交大片免费看小说| 国产自产女人91一区在线观看| 国产精品久久77777| 久久精品99久久久久久久久| 操日韩av在线电影| 精品久久中文字幕| 主播福利视频一区| 亚洲色在线视频| 色综合久综合久久综合久鬼88| 高清欧美性猛交| 欧美国产日本在线| 久久久久久久999| 国产精品一区电影| 成人免费网站在线观看| 久久人人看视频| 国产精品久久久亚洲| 国产网站欧美日韩免费精品在线观看| 国产亚洲aⅴaaaaaa毛片| 日韩久久免费视频| 国产精品日韩久久久久| 欧美午夜精品久久久久久人妖| 欧美色道久久88综合亚洲精品| 亚洲高清色综合| 欧美激情网友自拍| 成人激情在线播放| 2019亚洲日韩新视频| 精品夜色国产国偷在线| 国产69精品久久久久久| 国产精品美女久久久久av超清| 亚洲国产精久久久久久| 在线成人免费网站| 日韩小视频网址| www.亚洲一二| 国产欧美日韩中文| 欧美巨猛xxxx猛交黑人97人| 国产精品久久久久久久久久免费| 久久免费视频在线| 97国产精品视频人人做人人爱| 在线成人免费网站| 亚洲色图狂野欧美| 亚洲风情亚aⅴ在线发布| 色偷偷偷综合中文字幕;dd| 欧美激情视频在线免费观看 欧美视频免费一| 日韩中文在线中文网在线观看| 欧美激情综合亚洲一二区| 日韩成人在线播放| 成人字幕网zmw| 亚洲欧洲自拍偷拍| 日韩精品免费一线在线观看| 国产美女久久精品| 九九热视频这里只有精品| 国产日韩换脸av一区在线观看| 69**夜色精品国产69乱| 欧美亚洲在线视频| 欧美成人免费va影院高清| 日韩视频免费大全中文字幕| 欧美成人性生活| 日日噜噜噜夜夜爽亚洲精品| 亚洲国产精品99久久| 国产精品一区专区欧美日韩| 国产精品久久久久久久av大片| 国产精品久久99久久| 亚洲第一精品福利| 91av视频在线免费观看| 91av国产在线| 国内精品国产三级国产在线专| 亚洲日本欧美日韩高观看| 亚洲综合国产精品| 91国产视频在线| 欧洲永久精品大片ww免费漫画| 中文字幕日韩专区| 日本中文字幕不卡免费| 亚洲综合大片69999| 日韩免费观看视频| 欧美激情xxxxx| 亚洲片在线观看| 在线日韩日本国产亚洲| 久久精品久久久久久国产 免费| 福利视频导航一区| 全球成人中文在线| 欧美福利在线观看| 性欧美办公室18xxxxhd| 中文字幕最新精品| 97视频色精品| 亚洲欧美另类在线观看| 国产精品久久久久久久av电影| 国产精品视频白浆免费视频| 国产女人18毛片水18精品| 大伊人狠狠躁夜夜躁av一区| 国产精品成熟老女人| 亚洲国产精品久久精品怡红院| 欧美一区二区三区四区在线| 亚洲国产另类 国产精品国产免费| 中文字幕日本精品| 久久影视电视剧免费网站清宫辞电视| 久久久噜噜噜久久中文字免| 不卡av电影院| 欧美日韩一区二区三区| 亚洲老板91色精品久久| 成人黄色免费在线观看| 亚洲人成网站在线播| 亚洲精品国产suv| 久久亚洲精品视频| 国产精品毛片a∨一区二区三区|国| 欧美成人国产va精品日本一级| 日韩精品免费视频| 中文字幕最新精品| 国产精品女人网站| 色樱桃影院亚洲精品影院| 亚洲国产精品大全| 国产精品成人国产乱一区| 国产精品电影观看| 国内精品久久久久伊人av| 日韩在线视频免费观看| 亚洲精品999| 久久久人成影片一区二区三区| 欧美在线视频播放| 久久久久久久999精品视频| 国产精品久久久久久久久久久久| 久久精品国产2020观看福利| 久久久久久中文字幕| 国产精品一区二区在线| 欧美日韩亚洲91| 亚洲成人精品视频在线观看| 精品成人在线视频| 国产精品入口日韩视频大尺度| 91av在线影院| 亚洲欧洲偷拍精品| 在线一区二区日韩| 久久精品中文字幕免费mv| 日韩视频免费大全中文字幕| 久久久成人的性感天堂| 亚洲国产精品电影| 亚洲精品小视频在线观看| 亚洲视频专区在线| 亲子乱一区二区三区电影| 国产精品日韩在线一区| 亚洲美女性生活视频| 日韩精品极品在线观看| 97在线精品国自产拍中文| 亚洲国产欧美一区二区三区同亚洲| 亚洲女人被黑人巨大进入al| 中文国产亚洲喷潮| 国产91精品久久久久| 欧美激情喷水视频| 日韩在线一区二区三区免费视频| 国产精品盗摄久久久| 亚洲色图狂野欧美| 黑人狂躁日本妞一区二区三区| 久久久久久999| 97视频在线观看网址| 欧美疯狂做受xxxx高潮| 精品毛片网大全| 成人a视频在线观看| 中文字幕av一区中文字幕天堂| 精品福利视频导航| 国产精品在线看| 狠狠躁18三区二区一区| 久久艳片www.17c.com| 国产成人精品av| 亚洲国产日韩欧美在线99| 国产999精品久久久影片官网| 国产精品欧美日韩一区二区| 日本久久久久久久久|