美文网首页iOS开发知识小集
OC版本 导航栏渐变---加导航栏指示器效果

OC版本 导航栏渐变---加导航栏指示器效果

作者: 白色天空729 | 来源:发表于2018-08-16 14:19 被阅读54次
    Untitled.gif
    #import "ViewController.h"
    #define ZXSCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
    #define ZXSCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height
    #define TopCycleScrollviewHeight   (ZXSCREEN_WIDTH*(165.0/375.0))
    
    @interface ViewController ()<UIScrollViewDelegate,UITableViewDelegate,UITableViewDataSource>
    
    @property (nonatomic, strong) UIView *topSelectBtnBgView;
    @property (nonatomic, strong) UIView *topMarkLine;
    @property (nonatomic, strong) UITableView *tableView;
    
    @property (nonatomic, strong) UIScrollView *scrollView;
    @property (nonatomic, strong) NSMutableArray *navItemsArr;
    
    @property (nonatomic, strong) UIButton *navSelectItem;
    @property (nonatomic, assign) BOOL isClickNavItem;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        self.isClickNavItem    = NO;
        
        [self.view addSubview:self.tableView];
        [self.view addSubview:self.topSelectBtnBgView];
    
        [self.view sendSubviewToBack:self.topSelectBtnBgView];
        
        self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];
    }
    
    -(UIView *)topSelectBtnBgView {
        if (!_topSelectBtnBgView) {
            
            _topSelectBtnBgView = [UIView new];
            _topSelectBtnBgView.alpha = 0;
            
            _topSelectBtnBgView.backgroundColor = [UIColor blueColor];
            self.navItemsArr  = [NSMutableArray arrayWithCapacity:0];
            NSArray *titlearr = @[@"商品",@"相关推荐",@"详细信息",@"规格参数"];
            [titlearr enumerateObjectsUsingBlock:^(NSString *string, NSUInteger idx, BOOL * _Nonnull stop) {
                UIButton *btn = [UIButton new];
                [self.navItemsArr addObject:btn];
                btn.tag = 2*idx+1;
                btn.backgroundColor = [UIColor purpleColor];
                btn.titleLabel.font = [UIFont systemFontOfSize:14];
                [btn setTitle:string forState:UIControlStateNormal];
                [btn addTarget:self action:@selector(onChangeItemBtnClick:) forControlEvents:UIControlEventTouchUpInside];
                if (idx == 0) {
                    self.navSelectItem = btn;
                    [btn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
                    [self.topSelectBtnBgView addSubview:self.topMarkLine];
                }else {
                    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
                }
                
                btn.frame = CGRectMake(idx*ZXSCREEN_WIDTH/4.0, 90, ZXSCREEN_WIDTH/4.0, 30);
                [self.topSelectBtnBgView addSubview:btn];
            }];
        }
        return _topSelectBtnBgView;
    }
    
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell classForCoder])];
        cell.textLabel.text = @(indexPath.row).stringValue;
        return cell;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        if (section == 0) {
            return 10;
        }
        
        if (section == 1) {
            return 10;
        }
        return 20;
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 4;
    }
    
    - (UITableView *)tableView {
        if (!_tableView) {
            _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 164, ZXSCREEN_WIDTH, ZXSCREEN_HEIGHT - 164) style:UITableViewStyleGrouped];
            _tableView.delegate = self;
            _tableView.dataSource = self;
            [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];
        }
        return _tableView;
    }
    
    -(UIView *)topMarkLine {
        if (!_topMarkLine) {
            _topMarkLine = [UIView new];
            _topMarkLine.frame = CGRectMake((ZXSCREEN_WIDTH/4.0)/2.0-(21)/2.0, 64 + 30, 21, 2);
            _topMarkLine.backgroundColor = [UIColor purpleColor];
        }
        return _topMarkLine;
    }
    
    
    
    - (void)click {
        
        NSLog(@"ddd");
    }
    
    -(void)onChangeItemBtnClick:(UIButton *)sender {
        
        self.isClickNavItem = YES;
        [self.navSelectItem setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [sender setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal];
        self.navSelectItem = sender;
        [UIView animateWithDuration:0.2 animations:^{
            self.topMarkLine.frame = CGRectMake(sender.tag*ZXSCREEN_WIDTH/8.0-(21)/2.0, 64 + 30, 21, 2);
        }];
        NSInteger section = (sender.tag-1)/2;
        if (section == 0) {
            [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:(sender.tag-1)/2] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
        }else {
            self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
            [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:(sender.tag-1)/2] atScrollPosition:UITableViewScrollPositionTop animated:YES];
            self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
        }
    }
    
    
    #pragma mark - UIScrollViewDelegate
    -(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
        self.isClickNavItem = NO;
    }
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        
        CGFloat alpha = MIN(1, scrollView.contentOffset.y/TopCycleScrollviewHeight);
        NSLog(@"%d - %f",__LINE__,alpha);
        
        if (alpha >= 0 && alpha <= 1) {
            self.topSelectBtnBgView.alpha = alpha;
            self.navigationController.navigationBar.alpha = alpha;
        }
        
        if (alpha < 0) {
            self.topSelectBtnBgView.alpha = 0;
            self.navigationController.navigationBar.alpha = 0;
        }
        
        self.topMarkLine.frame = CGRectMake(self.navSelectItem.tag*ZXSCREEN_WIDTH/8.0-(21)/2.0, 64 + 30, 21, 2);
        
        if (!self.isClickNavItem) {
            if (scrollView.contentOffset.y >= self.tableView.contentSize.height-(ZXSCREEN_HEIGHT-64)) {
                [self.navSelectItem setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                self.navSelectItem = self.navItemsArr[3];
                [self.navSelectItem setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
            }else {
                CGPoint offsetPoint = CGPointMake(0, scrollView.contentOffset.y+98);
                NSIndexPath *indexpath = [self.tableView indexPathForRowAtPoint:offsetPoint];
                
                [self.navSelectItem setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
                self.navSelectItem = self.navItemsArr[indexpath.section];
                [self.navSelectItem setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
            }
            
            [UIView animateWithDuration:0.2 animations:^{
                self.topMarkLine.frame = CGRectMake(self.navSelectItem.tag*ZXSCREEN_WIDTH/8.0-(21)/2.0, 64 + 30, 21, 2);
            }];
        }
    }
    
    @end
    
    

    相关文章

      网友评论

        本文标题:OC版本 导航栏渐变---加导航栏指示器效果

        本文链接:https://www.haomeiwen.com/subject/vgznbftx.html