首页 > 其他分享 >使用NSTimer和CGAffineTransformMakeRotation实现旋转动画

使用NSTimer和CGAffineTransformMakeRotation实现旋转动画

时间:2023-06-13 22:33:58浏览次数:43  
标签:动画 angle sender selected transform timer NSTimer CGAffineTransformMakeRotation


 

使用NSTimer和CGAffineTransformMakeRotation实现旋转动画

 

首先定义需要用到的变量

    float angle;
    NSTimer* timer;

 



#pragma mark ------------------->旋转图片<-------------------
- (void)_doRotateImage{
    //演员初始化
    UIImageView* ivImage = [[UIImageView alloc] init];
    UIImage* img = [UIImage imageNamed:@"image_loading"];
    ivImage.image=img;
    ivImage.frame=CGRectMake(100, 200, img.size.width, img.size.height);
    ivImage.center=self.view.center;
    ivImage.userInteractionEnabled=YES;
    ivImage.tag=9999;
    [self.view addSubview:ivImage];
    //初始化定时器NSTimer
    timer =[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(_doOnTimer) userInfo:nil repeats:YES];
    
    //添加一个按钮用来暂停、开始定时器
    UIButton* btnTimer = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btnTimer setTitle:@"暂停" forState:UIControlStateNormal];
    [btnTimer setTitle:@"开启" forState:UIControlStateSelected];
    [btnTimer addTarget:self action:@selector(_doPauseOrStartTimer:) forControlEvents:UIControlEventTouchUpInside];
    btnTimer.frame=CGRectMake(100, 340, 100, 40);
    [self.view addSubview:btnTimer];
}

#pragma mark 定时器的触发事件
-(void) _doOnTimer{
    UIView* view = [self.view.window viewWithTag:9999];
    angle = angle + 0.05;//angle角度 double angle;
    if (angle > 6.28) {//大于 M_PI*2(360度) 角度再次从0开始
        angle = 0;
    }
    CGAffineTransform transform=CGAffineTransformMakeRotation(angle);
    view.transform = transform;
}


-(void) _doPauseOrStartTimer:(UIButton*) sender{
    
    if (sender.selected) {
        [timer setFireDate:[NSDate distantPast]];
    }else{
        [timer setFireDate:[NSDate distantFuture]];
    }
    sender.selected=!sender.selected;
    
}



 

效果图如下:

 

使用NSTimer和CGAffineTransformMakeRotation实现旋转动画_#pragma


使用NSTimer和CGAffineTransformMakeRotation实现旋转动画_#pragma_02


 

 

 

 

标签:动画,angle,sender,selected,transform,timer,NSTimer,CGAffineTransformMakeRotation
From: https://blog.51cto.com/u_16160131/6473911

相关文章

  • 【原】iOSCoreAnimation动画系列教程(一):CABasicAnimation【包会】
    【原】iOSCoreAnimation动画系列教程(一):CABasicAnimation【包会】 在iOS中,图形可分为以下几个层次: 越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低;反之亦然。本文着重介绍CoreAnimation层的基本动画实现方案。在iOS中,展示动画可以类比于显示生活中的“拍电影”。拍电影有......
  • css实现向上滚动动画
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"content="w......
  • 弹性动画
    制作原理:绘制基本图形+万能弹性公式1、摄像机 2、射箭 3、时钟 ......
  • 转场动画
    1、通过矩形+蒙版,构成简单的转场。 2、通过色条的错位,时间轴的设置,构成基本的转场。 3、通过图形的放大缩小之间的转换及图形的基本错位,构成基本的转场。4、通过图形+蒙版,构成基本的转场。 ......
  • 前端vue可以左右滚动的切换的tabs tabs选项卡 滑动动画效果 自动宽度
    前端vue可以左右滚动的切换的tabstabs选项卡滑动动画效果自动宽度, 下载完整代码请访问https://ext.dcloud.net.cn/plugin?id=13003效果图如下:     ####使用方法```使用方法swiperTabList:["2023-06-10","2023-06-11","2023-06-12","2023-06-13","20......
  • 模拟春雪漫天飘的动画效果(前端)
    一、实现思路DIV布局的使用整体背景radial-gradient属性的使用夜空rotate属性的使用雪花radial-gradient属性的使用雪花移动动画animation属性的使用雪花移动过程中translate3d属性的使用二、部分HTML代码因为雪花的元素是相同的,只是移动的起点,移动过程,移动的终点不同,所以HTML元素......
  • Python保存任意长度的matplotlib动画为GIF动图
    任务描述:使用Python+matplotlib绘制散点图动画模拟随机游走的布朗运动,每个散点符号表示一个分子,每个散点符号都有不同的预期停靠位置,当随机游走到停靠位置之后不再运动,最后把完整动画保存为GIF动图。由于每个分子的运动都是随机的,无法确定什么时候才能到达预期的终点,所以整个动画的......
  • 下拉菜单缓慢展开收起的动画过渡效果,vue2 CSS
    需求:点击下拉菜单按钮,显示子菜单并有过渡效果过渡效果:缓慢展开收起环境:vue2CSS分析:子菜单的高度有没有固定,如果子菜单的高度固定,可以设置高的变化添加过渡效果。如果高度不固定设置最大高度的变化添加过渡效果图片展示:展开状态收起状态 实现代码:<template><div>......
  • 直播源码开发,使用动画设置ProgressBar进度
    直播源码开发,使用动画设置ProgressBar进度布局文件: <?xmlversion="1.0"encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  ......
  • 专业角色动画制作-Character Animator 2023 win中文
    CharacterAnimator2023是Adobe公司推出的一款专业角色动画制作软件,它的主要功能是将用户的实时动作转换为角色动画,能够快速创建高质量的动画作品。→→↓↓载CharacterAnimator2023win 一、界面介绍CharacterAnimator2023的界面非常简洁,分为三个主要部分:舞台、面板和......