• 【代码笔记】iOS-点击一个按钮会出现多个按钮的动画效果


    一,效果图。

    二,工程图。

    三,代码。

    RootViewController.h

    复制代码
    #import <UIKit/UIKit.h>
    
    @interface RootViewController : UIViewController
    {
        UIImageView *iCanImageView;
        UIImageView *menu_carImageView;
        UIImageView *menu_movieImageView;
        UIImageView *menu_setImageView;
        UIImageView *menu_photoImageView;
        BOOL isRonating;
        int count;
    }
    @end
    复制代码

     

    RootViewController.m

    复制代码
    #import "RootViewController.h"
    
    @interface RootViewController ()
    
    @end
    
    @implementation RootViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        //初始化背景图
        [self initBackgroundView];
        
        
    }
    #pragma -mark -functions
    -(void)initBackgroundView
    {
        //隐藏导航条
        self.navigationController.navigationBarHidden=YES;
        
        //设置背景图片
        UIImageView *bgImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"main_bg.png"]];
        bgImage.frame = self.view.bounds;
        
        //背景图添加手势
        UITapGestureRecognizer *bgTgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bgClick)];
        [bgImage addGestureRecognizer:bgTgr];
        bgImage.userInteractionEnabled = YES;
        
        [self.view addSubview:bgImage];
        
        
        //背景图上的小图标
        iCanImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ican.png"]];
        iCanImageView.center = CGPointMake(50, 400);
        
        //小图标添加手势
        UITapGestureRecognizer *iCanTgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(iCanClick)];
        [iCanImageView addGestureRecognizer:iCanTgr];
        iCanImageView.userInteractionEnabled = YES;
        
        
        //弹出的4个设置的小图标
        //车图标
        menu_carImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menu_car.png"]];
        menu_carImageView.tag = 3;
        menu_carImageView.center = iCanImageView.center;
        
        //视频的图标
        menu_movieImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menu_movie.png"]];
        menu_movieImageView.tag = 4;
        menu_movieImageView.center = iCanImageView.center;
        
        //图片的图标
        menu_photoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
        menu_photoImageView.tag = 5;
        menu_photoImageView.center = iCanImageView.center;
        
        //设置的图标
        menu_setImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menu_set.png"]];
        menu_setImageView.tag = 6;
        menu_setImageView.center = iCanImageView.center;
        
        
        [self.view addSubview:menu_carImageView];
        [self.view addSubview:menu_movieImageView];
        [self.view addSubview:menu_photoImageView];
        [self.view addSubview:menu_setImageView];
        [self.view addSubview:iCanImageView];
        
        
        // 将小图片都添加到数组,最后循环数组为每一个小图片添加点击手势
        NSArray *imageViewArr = [[NSArray alloc] initWithObjects:menu_carImageView,menu_movieImageView,menu_photoImageView,menu_setImageView, nil];
        
        for(UIImageView *view in imageViewArr)
        {
            UITapGestureRecognizer *jumpTo = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(Jump:)];
            view.userInteractionEnabled = YES;
            [view addGestureRecognizer:jumpTo];
        }
        
        // 判断图标是否旋转,还有小图标是否飞出
        isRonating = NO;
        
        // 用于计数小图片旋转的时间
        count = 0;
    }
    #pragma -mark -doClickActions
    //点击iCan图标,弹出图标
    -(void)iCanClick
    {
        CGAffineTransform trans = iCanImageView.transform;
        if(isRonating == NO)
        {
            CGAffineTransform newTrans = CGAffineTransformRotate(trans, -2*M_1_PI);
            [UIView animateWithDuration:0.3 animations:^{
                iCanImageView.transform = newTrans;
                [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(GoOut:) userInfo:nil repeats:YES];
            }];
            isRonating = YES;
        }
        else
        {
            CGAffineTransform newTrans = CGAffineTransformRotate(trans, 2*M_1_PI);
            [UIView animateWithDuration:0.3 animations:^{
                iCanImageView.transform = newTrans;
                [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(Back:) userInfo:nil repeats:YES];
            }];
            isRonating = NO;
        }
    }
    //点击背景图,图标旋转回原位
    -(void)bgClick
    {
        if(isRonating == YES)
        {
            CGAffineTransform trans = iCanImageView.transform;
            CGAffineTransform newTrans = CGAffineTransformRotate(trans, 2*M_1_PI);
            [UIView animateWithDuration:0.3 animations:^{
                iCanImageView.transform = newTrans;
                [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(Back:) userInfo:nil repeats:YES];
            }];
            isRonating = NO;
        }
    }
    //弹出的动作
    -(void)GoOut:(id)sender
    {
        NSTimer *tiemr = (NSTimer *)sender;
        count++;
        [UIView animateWithDuration:0.2 animations:^{
            menu_carImageView.center = [self location:CGPointMake(-10, 128)];
        }];
        if(count>2)
            [UIView animateWithDuration:0.2 animations:^{
                menu_movieImageView.center = [self location:CGPointMake(45, 100)];
            }];
        if(count>3)
            [UIView animateWithDuration:0.2 animations:^{
                menu_photoImageView.center = [self location:CGPointMake(88, 55)];
            }];
        if(count>4)
            [UIView animateWithDuration:0.2 animations:^{
                menu_setImageView.center = [self location:CGPointMake(105, -8)];
            }];
        if(count>5)
        {
            count = 0;
            [tiemr invalidate];
        }
    }
    //回归原位的动作
    -(void)Back:(id)sender;
    {
        NSTimer *timer = (NSTimer *)sender;
        count ++;
        [UIView animateWithDuration:0.2 animations:^{
            [self Ronate:menu_setImageView];
        }];
        if(count>3)
            [UIView animateWithDuration:0.2 animations:^{
                [self Ronate:menu_photoImageView];
            }];
        if(count>6)
            [UIView animateWithDuration:0.2 animations:^{
                menu_setImageView.center = iCanImageView.center;
            }];
        if(count>8)
            [UIView animateWithDuration:0.2 animations:^{
                menu_photoImageView.center = iCanImageView.center;
            }];
        if(count>5)
            [UIView animateWithDuration:0.2 animations:^{
                [self Ronate:menu_movieImageView];
            }];
        if(count>9)
            [UIView animateWithDuration:0.2 animations:^{
                menu_movieImageView.center = iCanImageView.center;
            }];
        if(count >7)
            [UIView animateWithDuration:0.2 animations:^{
                [self Ronate:menu_carImageView];
            }];
        if(count>10)
            [UIView animateWithDuration:0.2 animations:^{
                menu_carImageView.center = iCanImageView.center;
            }];
        if(count>11)
        {
            menu_carImageView.transform = CGAffineTransformMakeRotation(0);
            menu_movieImageView.transform = CGAffineTransformMakeRotation(0);
            menu_photoImageView.transform = CGAffineTransformMakeRotation(0);
            menu_setImageView.transform = CGAffineTransformMakeRotation(0);
            count = 0;
            [timer invalidate];
        }
    }
    -(CGPoint)location:(CGPoint)p
    {
        CGFloat x = CGRectGetMaxX(iCanImageView.frame);
        CGFloat y = iCanImageView.center.y;
        CGPoint pp = CGPointMake(x+p.x+20, y-p.y-10);
        return pp;
    }
    -(void)Ronate:(UIImageView *)view
    {
        view.transform = CGAffineTransformMakeRotation(360.0f*count);
    }
    // 界面跳转
    -(void)Jump:(id)sender
    {
        UIGestureRecognizer *t = (UIGestureRecognizer *)sender;
        UIImageView *view = (UIImageView *)t.view;
        UIEdgeInsets set;
        set.top = 5.0f;
        set.bottom = 5.0f;
        set.left = 5.0f;
        set.right = 5.0f;
        if(view.tag == 3)
        {
             [self Scale:view];
         }
        else if(view.tag == 4)
        {
            [self Scale:view];
         }
        else if(view.tag == 5)
        {
            [self Scale:view];
        }
        else
        {
            [self Scale:view];
        }
    }
    
    // 放大和缩小图片
    -(void)Scale:(UIImageView *)view
    {
        if(view.tag == 3)
        {
            CGFloat scale = 1.5;
            CGAffineTransform trans = view.transform;
            [UIImageView animateWithDuration:0.5 animations:^{
                CGAffineTransform newTrans = CGAffineTransformScale(trans, scale, scale);
                CGAffineTransform newTrans1 = CGAffineTransformScale(trans, 0.5, 0.5);
                view.transform = newTrans;
                menu_movieImageView.transform = newTrans1;
                menu_photoImageView.transform = newTrans1;
                menu_setImageView.transform = newTrans1;
                view.alpha = 0.1;
                menu_movieImageView.alpha = 0.1;
                menu_photoImageView.alpha = 0.1;
                menu_setImageView.alpha = 0.1;
            } completion:^(BOOL finished) {
                NSLog(@"--跳转到第一个图标的页面---");
            }];
        }
        else if(view.tag == 4)
        {
            CGFloat scale = 1.5;
            CGAffineTransform trans = view.transform;
            [UIImageView animateWithDuration:0.5 animations:^{
                CGAffineTransform newTrans = CGAffineTransformScale(trans, scale, scale);
                CGAffineTransform newTrans1 = CGAffineTransformScale(trans, 0.5, 0.5);
                view.transform = newTrans;
                menu_carImageView.transform = newTrans1;
                menu_photoImageView.transform = newTrans1;
                menu_setImageView.transform = newTrans1;
                view.alpha = 0.1;
                menu_carImageView.alpha = 0.1;
                menu_photoImageView.alpha = 0.1;
                menu_setImageView.alpha = 0.1;
            } completion:^(BOOL finished) {
                NSLog(@"--跳转到第二个图标的页面---");
    
            }];
        }
        else if(view.tag == 5)
        {
            CGFloat scale = 1.5;
            CGAffineTransform trans = view.transform;
            [UIImageView animateWithDuration:0.5 animations:^{
                CGAffineTransform newTrans = CGAffineTransformScale(trans, scale, scale);
                CGAffineTransform newTrans1 = CGAffineTransformScale(trans, 0.5, 0.5);
                view.transform = newTrans;
                menu_movieImageView.transform = newTrans1;
                menu_carImageView.transform = newTrans1;
                menu_setImageView.transform = newTrans1;
                view.alpha = 0.1;
                menu_movieImageView.alpha = 0.1;
                menu_carImageView.alpha = 0.1;
                menu_setImageView.alpha = 0.1;
            } completion:^(BOOL finished) {
                NSLog(@"--跳转到第三个图标的页面---");
    
            }];
        }
        else
        {
            CGFloat scale = 1.5;
            CGAffineTransform trans = view.transform;
            [UIImageView animateWithDuration:0.5 animations:^{
                CGAffineTransform newTrans = CGAffineTransformScale(trans, scale, scale);
                CGAffineTransform newTrans1 = CGAffineTransformScale(trans, 0.5, 0.5);
                view.transform = newTrans;
                menu_movieImageView.transform = newTrans1;
                menu_photoImageView.transform = newTrans1;
                menu_carImageView.transform = newTrans1;
                view.alpha = 0.1;
                menu_movieImageView.alpha = 0.1;
                menu_photoImageView.alpha = 0.1;
                menu_carImageView.alpha = 0.1;
            } completion:^(BOOL finished) {
                NSLog(@"--跳转到第四个图标的页面---");
    
            }];
            
        }
    }
    
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    复制代码

     

  • 相关阅读:
    WCF 第十一章 工作流服务 处理上下文
    WCF 第十一章 工作流服务 总结
    如何: 连接到一台远程计算机(下)
    WCF 第十一章 工作流服务 从WF暴露一个服务(中)
    WCF 第十一章 工作流服务 从WF暴露一个服务(下)
    WCF 第十一章 工作流服务 从WF暴露一个服务
    [转载]不太规则的迷宫生成算法1
    c# 文件操作
    一些重要的算法
    十个开源的Javascript框架
  • 原文地址:https://www.cnblogs.com/yang-guang-girl/p/5132321.html
Copyright © 2020-2023  润新知