源码简介:FDSlideBar是一个顶部滑动菜单,如常见的网易、腾讯新闻等样式。该控件支持自定颜色、字体等多种样式风格。菜单间切换流畅,具有较好的体验性。下部的内容展示经过挣扎,***选择了UITableView实现,从而很好地解决了ScrollView的内存问题,也获得了很好地原生滑动效果。
测试环境:Xcode 6.2,iOS 6.0以上
源码截图:
源码片段:
- FDSlideBar *sliderBar = [[FDSlideBar alloc] init];
- sliderBar.backgroundColor = [UIColor colorWithRed:0 / 255.0 green:128 / 255.0 blue:128 / 255.0 alpha:1.0];
- // Init the titles of all the item
- sliderBar.itemsTitle = @[@"要闻", @"视频", @"上海", @"娱乐", @"体育NBA", @"财经", @"科技", @"社会", @"军事", @"时尚", @"汽车", @"游戏", @"图片", @"股票"];
- // Set some style to the slideBar
- sliderBar.itemColor = [UIColor whiteColor];
- sliderBar.itemSelectedColor = [UIColor orangeColor];
- sliderBar.sliderColor = [UIColor orangeColor];
- // Add the callback with the action that any item be selected
- [sliderBar slideBarItemSelectedCallback:^(NSUInteger idx) {
- [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:idx inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
- }];
- [self.view addSubview:sliderBar];
- _slideBar = sliderBar;
- // The frame of tableView, be care the width and height property
- CGRect frame = CGRectMake(0, 0, CGRectGetMaxY(self.view.frame) - CGRectGetMaxY(self.slideBar.frame), CGRectGetWidth(self.view.frame));
- self.tableView = [[UITableView alloc] initWithFrame:frame];
- [self.view addSubview:self.tableView];
- // Register the custom cell
- UINib *nib = [UINib nibWithNibName:@"TableViewCell" bundle:nil];
- [self.tableView registerNib:nib forCellReuseIdentifier:@"ContentCell"];
- // Set the tableView center in the bottom of view. so after rotating, it shows rightly
- self.tableView.center = CGPointMake(CGRectGetWidth(self.view.frame) * 0.5, CGRectGetHeight(self.view.frame) * 0.5 + CGRectGetMaxY(self.slideBar.frame) * 0.5);
- self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
- // Rotate the tableView 90 angle anticlockwise
- self.tableView.transform = CGAffineTransformMakeRotation(-M_PI_2);
- self.tableView.showsVerticalScrollIndicator = NO;
- self.tableView.pagingEnabled = YES;
- self.tableView.dataSource = self;
- self.tableView.delegate = self;
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"ContentCell"];
- // Rotate the cell's content 90 angle clockwise to show them rightly
- cell.contentView.transform = CGAffineTransformMakeRotation(M_PI_2);
- cell.text = self.slideBar.itemsTitle[indexPath.row];
- return cell;
- }