iOS如何实现仿网易新闻滚动导航条效果-创新互联
这篇文章主要为大家展示了“iOS如何实现仿网易新闻滚动导航条效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS如何实现仿网易新闻滚动导航条效果”这篇文章吧。
创新互联是一家集网站建设,商丘企业网站建设,商丘品牌网站建设,网站定制,商丘网站建设报价,网络营销,网络优化,商丘网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。具体内容如下
实现效果
效果:选择不同的栏目,下面出现不同的视图,栏目条可以滚动;下面的视图也可以滚动,滚动时上面对应的栏目要选中颜色为红色;
滚动的导航条包括两部分:标题滚动视图(UIScrollView),内容滚动视图(UIScrollView)
实现代码
1.首先实现Main.storyboard
2.创建多个子控制器:头条、科技、汽车、体育、视频、图片、热点
// 头条ViewController, 其它控制器和这个控制器都一样,只是背景颜色不同而已 #import@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@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 () @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如何实现仿网易新闻滚动导航条效果”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
名称栏目:iOS如何实现仿网易新闻滚动导航条效果-创新互联
链接地址:http://myzitong.com/article/cehogd.html