zoukankan      html  css  js  c++  java
  • UI基础--按钮扩展动画

    新建一个类:继承UIView

    #import "GWRoundView.h"
    
    @interface GWRoundView (){
        
        CGFloat _Width;
        CGFloat _Height;
    
    }
    
    //中心按钮中心点,中心圆和周围圆的圆心距,圆心夹角,
    @property(nonatomic,assign)CGPoint btnCenter;
    @property(nonatomic,assign)CGFloat R;
    @property(nonatomic,assign)CGFloat angle;
    
    
    @end
    
    @implementation GWRoundView
    
    -(instancetype)initWithFrame:(CGRect)frame{
        
        self = [super initWithFrame:frame];
        if (self) {
            
            [self setRoundButton];
        }
        return self;
    }
    
    
    -(void)setRoundButton{
        
        _Width = self.frame.size.width;
        _Height = self.frame.size.height;
        
        CGFloat n=7; //小圆的个数
        self.angle = 2*M_PI/n;
        CGFloat a = 10; //小圆的间距
        self.R = 90; //中心圆和周围圆的圆心距
        CGFloat r = self.R*sinf(self.angle/2.0)-a/2.0; //小圆的半径
        
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(_Width/2-40, _Width/2-40, 80, 80);
        button.tag = 300;
        button.layer.cornerRadius = 80/2;
        //button.backgroundColor = [UIColor redColor];
        [button setTitle:@"世界" forState:UIControlStateNormal];
        [button setBackgroundImage:[UIImage imageNamed:@"earth"] forState:UIControlStateNormal];
        self.btnCenter = button.center;
        [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:button];
        
        NSArray *array = @[@"亚洲",@"欧洲",@"北美",@"南美",@"大洋",@"非洲",@"南极"];
        for (int i=0; i<n; i++) {
            
            UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            btn.frame = CGRectMake(0, 0, 2*r, 2*r);
            btn.center = self.btnCenter;
            btn.tag = 100+i;
            btn.alpha = 0;
            btn.layer.cornerRadius = r;
            //btn.backgroundColor = [UIColor yellowColor];
            [btn setTitle:array[i] forState:UIControlStateNormal];
            [btn setTitleColor:[UIColor brownColor] forState:UIControlStateNormal];
            [btn setTitleColor:[UIColor purpleColor] forState:UIControlStateSelected];
            [btn setBackgroundImage:[UIImage imageNamed:@"bg1"] forState:UIControlStateNormal];
            [btn setBackgroundImage:[UIImage imageNamed:@"bg2"] forState:UIControlStateSelected];
            [btn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
            if (i==0) {
                btn.selected = YES;
            }
            [self addSubview:btn];
        }
        
        //把中心按钮永远放在父视图最上层
        [self bringSubviewToFront:button];
        
        
    }
    
    //所有button的点击事件
    -(void)buttonClick:(UIButton *)button{
        
        if (button.tag==300) {
            
            if (button.selected == NO) {
                [UIView animateWithDuration:0.3 animations:^{
                    button.center = self.btnCenter;
                }];
                [UIView animateWithDuration:1 animations:^{
                    for (int i=0; i<7; i++) {
                        UIButton *btn = (UIButton *)[self viewWithTag:i+100];
                        CGFloat x = self.R * cosf(self.angle * i) +self.btnCenter.x;
                        CGFloat y = self.R * sinf(self.angle * i) + self.btnCenter.y;
                        btn.center = CGPointMake(x ,y);
                        btn.alpha = 1;
                    }
                }];
            }else{
                [UIView animateWithDuration:1 animations:^{
                    for (int i=0; i<7; i++) {
                        UIButton *btn = (UIButton *)[self viewWithTag:i+100];
                        btn.center = self.btnCenter;
                        btn.alpha = 0;
                    }
                }];
                //[self startTimer];
            }
            button.selected = !button.selected;
        }else if (button.tag>=100&&button.tag<107){
            button.selected = YES;
            [self selectChangedWithTag:button.tag];
            
            //
            [self selectDataWithNumber:button.tag-100.0];
        }
    }
    
    //点击按钮后,上一个按钮改变状态
    -(void)selectChangedWithTag:(NSInteger)tag{
        for (int i=100; i<107; i++) {
            if (i==tag) {
                
            }else{
                UIButton *button = (UIButton *)[self viewWithTag:i];
                button.selected = NO;
            }
        }
    }
    
    
    //根据点击按钮的不同,进行不同的操作
    -(void)selectDataWithNumber:(int)index{
        
        NSLog(@"%d", index);
    }

    在需要的地方调用:

     GWRoundView *roundView = [[GWRoundView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.width)];
        [self.view addSubview:roundView];
        
  • 相关阅读:
    完美解决微信端设置title失败问题
    linux下的find&&grep查找命令
    微信开发二三事
    干掉chrome下input恶心的黄色背景
    关于.gitignore文件使用说明
    HTTPie:一个不错的 HTTP 命令行客户端
    退出登录功能改变window的rootviewcontroller输入框键盘不会收起
    coredata操作工具
    并发编程gcd粗暴记忆法
    网友的百度移动云可穿戴部门的面试经历
  • 原文地址:https://www.cnblogs.com/LzwBlog/p/5864517.html
Copyright © 2011-2022 走看看