中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS如何實現仿網易新聞滾動導航條效果

發布時間:2021-06-28 13:37:11 來源:億速云 閱讀:301 作者:小新 欄目:移動開發

這篇文章主要為大家展示了“iOS如何實現仿網易新聞滾動導航條效果”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“iOS如何實現仿網易新聞滾動導航條效果”這篇文章吧。

具體內容如下

實現效果

效果:選擇不同的欄目,下面出現不同的視圖,欄目條可以滾動;下面的視圖也可以滾動,滾動時上面對應的欄目要選中顏色為紅色;

滾動的導航條包括兩部分:標題滾動視圖(UIScrollView),內容滾動視圖(UIScrollView)

iOS如何實現仿網易新聞滾動導航條效果

實現代碼

1.首先實現Main.storyboard

iOS如何實現仿網易新聞滾動導航條效果

2.創建多個子控制器:頭條、科技、汽車、體育、視頻、圖片、熱點

// 頭條ViewController, 其它控制器和這個控制器都一樣,只是背景顏色不同而已
#import <UIKit/UIKit.h>
@interface TopLineViewController : UIViewController

@end
//----------------------------------------------------------------
#import "TopLineViewController.h"
@interface TopLineViewController ()

@end

@implementation TopLineViewController
- (void)viewDidLoad {
 [super viewDidLoad];

 self.view.backgroundColor = [UIColor blackColor];
}
@end

實現Main.storyboard對應的視圖控制器ViewController

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController

@end
//----------------------------------------------------------------
#import "ViewController.h"
#import "TopLineViewController.h"
#import "TechnologyViewController.h"
#import "CarViewController.h"
#import "SportsViewController.h"
#import "VideoViewController.h"
#import "ImageViewController.h"
#import "HotViewController.h"

#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController () <UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *titleScrollView;

@property (weak, nonatomic) IBOutlet UIScrollView *contentScrollView;

@property (strong, nonatomic) NSMutableArray *buttons;
@property (strong, nonatomic) UIButton *selectedButton;

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 self.navigationItem.title = @"網易新聞";
 // 1. 初始化標題滾動視圖上的按鈕
 [self initButtonsForButtonScrollView];


}


- (void) initButtonsForButtonScrollView {
 // 初始化子控制器
 [self initChildViewControllers];
 CGFloat buttonWidth = 100;
 CGFloat buttonHeight = 40;
 NSInteger childViewControllerCount = self.childViewControllers.count;
 for (NSInteger i = 0; i < childViewControllerCount; i++) {
  UIViewController *childViewController = self.childViewControllers[i];
  UIButton *titleButton = [UIButton buttonWithType:UIButtonTypeCustom];
  titleButton.tag = i;
  CGFloat x = i * buttonWidth;
  titleButton.frame = CGRectMake(x, 0, buttonWidth, buttonHeight);
  [titleButton setTitle:childViewController.title forState:UIControlStateNormal];
  [titleButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [titleButton addTarget:self action:@selector(titleButtonOnClick:) forControlEvents:UIControlEventTouchUpInside];
  [self.titleScrollView addSubview:titleButton];

  [self.buttons addObject:titleButton];
 }

 self.titleScrollView.contentSize = CGSizeMake(buttonWidth * childViewControllerCount, 0);
 self.titleScrollView.showsHorizontalScrollIndicator = NO;
 self.titleScrollView.bounces = NO;

 self.contentScrollView.contentSize = CGSizeMake(ScreenWidth * childViewControllerCount, 0);
 self.contentScrollView.showsHorizontalScrollIndicator = NO;
 self.contentScrollView.pagingEnabled = YES;
 self.contentScrollView.delegate = self;

 // 禁止額外滾動區域
 self.automaticallyAdjustsScrollViewInsets = NO;

 // 初始化時默認選中第一個
 [self titleButtonOnClick:self.buttons[0]];
}


- (void)titleButtonOnClick:(UIButton *)button {
 // 1. 選中按鈕
 [self selectingButton:button];

 // 2. 顯示子視圖
 [self addViewToContentScrollView:button];
}

- (void)selectingButton:(UIButton *)button {
 [_selectedButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
 _selectedButton.transform = CGAffineTransformMakeScale(1.0, 1.0);
 [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
 button.transform = CGAffineTransformMakeScale(1.3, 1.3); // 選中字體變大,按鈕變大,字體也跟著變大
 _selectedButton = button;

 // 選中按鈕時要讓選中的按鈕居中
 CGFloat offsetX = button.frame.origin.x - ScreenWidth * 0.5;
 CGFloat maxOffsetX = self.titleScrollView.contentSize.width - ScreenWidth;

 if (offsetX < 0) {
  offsetX = 0;
 } else if (offsetX > maxOffsetX) {
  offsetX = maxOffsetX;
 }

 [self.titleScrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
}

- (void)addViewToContentScrollView:(UIButton *)button {
 NSInteger i = button.tag;
 UIViewController *childViewController = self.childViewControllers[i];
 CGFloat x = i * ScreenWidth;

 // 防止添加多次
 if (childViewController.view.subviews != nil) {
  childViewController.view.frame = CGRectMake(x, 0, ScreenWidth, ScreenHeight);
  [self.contentScrollView addSubview:childViewController.view];
 }
 self.contentScrollView.contentOffset = CGPointMake(x, 0);
}

#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {


}

// 滾動結束時,將對應的視圖控制器的視圖添加到內容滾動視圖中
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
 NSInteger i = self.contentScrollView.contentOffset.x / ScreenWidth;
 [self addViewToContentScrollView:_buttons[i]];

 // 內容滾動視圖結束后選中對應的標題按鈕
 [self selectingButton:_buttons[i]];
}

- (void)initChildViewControllers {
 // 0.頭條
 TopLineViewController * topViewController = [[TopLineViewController alloc] init];
 topViewController.title = @"頭條";
 [self addChildViewController:topViewController];

 // 1.科技
 TechnologyViewController * technologyViewController = [[TechnologyViewController alloc] init];
 technologyViewController.title = @"科技";
 [self addChildViewController:technologyViewController];

 // 2.汽車
 CarViewController * carViewController = [[CarViewController alloc] init];
 carViewController.title = @"汽車";
 [self addChildViewController:carViewController];

 // 3.體育
 SportsViewController * sportsViewController = [[SportsViewController alloc] init];
 sportsViewController.title = @"體育";
 [self addChildViewController:sportsViewController];

 // 4.視頻
 VideoViewController * videoViewController = [[VideoViewController alloc] init];
 videoViewController.title = @"視頻";
 [self addChildViewController:videoViewController];

 // 5.圖片
 ImageViewController * imageViewController = [[ImageViewController alloc] init];
 imageViewController.title = @"圖片";
 [self addChildViewController:imageViewController];

 // 6.熱點
 HotViewController * hotViewController = [[HotViewController alloc] init];
 hotViewController.title = @"熱點";
 [self addChildViewController:hotViewController];
}

- (NSMutableArray *)buttons {
 if (_buttons == nil) {
  _buttons = [NSMutableArray array];
 }

 return _buttons;
}
@end

以上是“iOS如何實現仿網易新聞滾動導航條效果”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

台安县| 福泉市| 大新县| 客服| 南靖县| 卢氏县| 盐津县| 福泉市| 岑巩县| 清丰县| 株洲县| 石阡县| 大洼县| 河池市| 滁州市| 固原市| 扎鲁特旗| 嘉善县| 新郑市| 揭西县| 宜州市| 韶关市| 胶南市| 根河市| 孝义市| 东乡| 哈巴河县| 福泉市| 建昌县| 黄龙县| 东阿县| 固安县| 从江县| 乌兰浩特市| 天长市| 松桃| 望江县| 榕江县| 彰化县| 额尔古纳市| 太白县|