当前位置:主页 > 移动开发 > iOS代码 >

iOS Segment带滑动条切换效果

时间:2023-01-08 11:11:54 | 栏目:iOS代码 | 点击:

本文实例为大家分享了iOS Segment带滑动条切换效果的具体代码,供大家参考,具体内容如下

#import "ViewController.h"
 
@interface ViewController ()
 
@property (nonatomic,strong) NSArray *arrTitle;
 
@property (nonatomic,strong) UIView *flyBar;
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    _arrTitle = [[NSArray alloc] initWithObjects:@"标题1",@"标题2",@"标题3",@"标题4", nil];
    
    UIView *baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
    baseView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:baseView];
    
    for (int i=0; i<_arrTitle.count; i++) {
        UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width/_arrTitle.count*i, 20,self.view.frame.size.width/_arrTitle.count, 40)];
        [btn setTitle:[_arrTitle objectAtIndex:i] forState:UIControlStateNormal];
        [btn setTag:100+i];
        [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        [baseView addSubview:btn];
    }
    
    _flyBar = [[UIView alloc] initWithFrame:CGRectMake(0, baseView.frame.size.height-2, self.view.frame.size.width/_arrTitle.count, 2)];
    _flyBar.backgroundColor = [UIColor redColor];
    [baseView addSubview:_flyBar];
}
 
- (void)btnClick:(id)sender
{
    NSInteger tagNum = [sender tag];
    [self updateButtonClickState:tagNum];
}
 
//更新按钮点击效果
- (void)updateButtonClickState:(NSInteger)tagNum
{
    UIButton *currentBtn = (UIButton *)[self.view viewWithTag:tagNum];
    
    for (int i=100; i<_arrTitle.count+100; i++) {
        if (i != tagNum) {
            UIButton *btn = (UIButton *)[self.view viewWithTag:i];
            [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        }
    }
    
    [UIView animateKeyframesWithDuration:0.1
                                   delay:0.0
                                 options:UIViewKeyframeAnimationOptionLayoutSubviews
                              animations:^{
                                  _flyBar.center = CGPointMake(currentBtn.center.x, _flyBar.center.y);
                              }
                              completion:^(BOOL finished) {
                                  [currentBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
                              }];
}
 
 
@end

您可能感兴趣的文章:

相关文章