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];
    
时间: 2024-11-08 16:35:43

UI基础--按钮扩展动画的相关文章

IOS-UI基础-按钮扩展

按钮的状态 Default 普通/默认状态 Highlighted 高亮状态 如果按钮被点击, 就会自动的切换到高亮状态 Selected 选中状态 通过设置 selected = YES 的时候表示按钮被选中 Disabled 禁用状态 通过设置  enabled = NO 表示禁用状态, 一旦被禁用, 就不会响应任何点击事件 backgroundImage 按钮有多大, 图片就会显示多大 image  图片有多大, 按钮就会被撑到图片的大小 如果同时设置了 tile  backgroundI

UI基础——按钮内边距,图片拉伸

一.内边距 UIButton有三个属性,分别可以设置按钮以及内部子控件的内边距 1.contentEdgeInsets 如果是设置contentEdgeInsets, 会把UIImageView和UIlabel当做一个整体移动 btn.contentEdgeInsets = UIEdgeInsetsMake(30, 0, 0, 0); 对应状态: 2.titleEdgeInsets/imageEdgeInsets 如果是设置titleEdgeInsets/imageEdgeInsets. 那么不

ui基础--放大缩小动画

首先我们用pod安装2个三方库: use_frameworks! target 'Love--动画' do pod 'pop', '~> 1.0.9' pod 'POP+MCAnimate', '~> 2.0' end 实现代码: #import "RootViewController.h" @interface RootViewController () @property (nonatomic, strong) UIImageView *myImageView; @pr

ios开发-UI基础-应用管理(单纯界面)改进5-使用代理实现监听下载按钮的点击(delegate)

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 前几篇文章介绍了一个应用管理的小应用,从最开始的单纯实现功能,一步一步就行改进\封装,上篇文章是使用xib进行了优化,本篇文章使用代理实现监听下载按钮的点击. 在原来的基础上,使用代理的主要思路分析: 首先要新建一个协议 声明协议的要实现的方法(一般为optional) 声明一个遵守该协议的代理的属性 使用代理,通知其代理完成操作 在代理中的实现步骤: 遵守协议 设置代理(一般通过拖线

IOS开发UI基础—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI基础-在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不到对象. 二.ImageView中添加按钮(1)ImageView和Button的比较 Button按钮的内部可以放置多张图片(4),而Im

iOS开发UI基础—transframe属性(形变)

iOS开发UI基础-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建"基于控件初始位置"的形变 CGAffineTransformMakeTranslation(平移) CGAffineTransformMakeScale(缩放) CGAffineTransformMakeRotation(旋转) (2) 创建"基于trans

OS开发UI基础—手写控件,frame,center和bounds属性

OS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View Contollor和view的关系 2.注意点 在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力! 设置控件监听方法的示例代码如下: [btn addTarget:sel

ios开发-UI基础-应用管理(单纯界面)改进4-xib封装

[注意]转载请注明出处:吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 上篇文章结尾介绍了一下为什么要对xib进行封装,这里不再赘述. 大体整理了一下封装的思路(我自己的想法,可能不是很清晰): 为了扩展,将xib的代码封装,创建一个类,来描述xib >在新建的.m文件中,新建一个类扩展(类似于viewController) >在新建的.h文件中,加入一个模型的属性(@class) >在新建的.m文件中,重写模型的set方法(在.h文件中已经加入了,自动生

ios开发-UI基础-超级猜图

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 本篇文章介绍一个比较综合的小应用----超级猜图. 功能分析: 根据显示的图片,在下面的待选项按钮中选中正确答案按钮,选中的按钮会显示在正确答案按钮中 答案错误,答案颜色变为红色,分数减小 答案正确,答案颜色变为蓝色,两秒自动跳入下一题,分数增加 点击"下一题"可以进入下一个题目 点击"大图",可以放大显示图片,再次点击图片或者背景,图片缩小至原来大小 点