各种动画集合

经常用到各种各样的动画,所以,自己写一个简单的类别,封装一些简单的动画操作。前段时间学习了一些关联的用法。本着学以致用的原则(怕不用几天又忘了),所以在封装这个小的类别时,用关联给类别增添了几个新的属性。github地址:https://github.com/n1sunjianfei/Animation



下面是一些简单的用法,当然,可以根据不同的起始点进行其他的动画。

初始化一个view

UIView *testView = [[UIView alloc]init];
    testView.frame = CGRectMake(0, 0, 280, 180);
    testView.backgroundColor = [UIColor grayColor];
    testView.layer.masksToBounds = YES;
    testView.layer.cornerRadius = 5;
    testView.animationTime = 0.5;

    __weak typeof(self) weakself=self;

    testView.finishedIn = ^(void){
        NSLog(@"移入");
        weakself.isShow = YES;
    };
    testView.finishedOut = ^(void){
        NSLog(@"移除");
        weakself.isShow = NO;
    };
    self.testView = testView;

添加几个按钮用以展示动画效果:

- (IBAction)ScaleIn:(UIButton *)sender {

    CGFloat width = CGRectGetWidth(self.view.frame);
    CGFloat height = CGRectGetHeight(self.view.frame);
    self.testView.center = CGPointMake(width/2, height/2);

    if (!_isShow) {
        [self.testView showInView_Scale:self.view];

    }else{

        [self.testView removeFromSuperView_Scale];
    }
}
- (IBAction)animationTest:(UIButton *)sender {

    CGFloat width = CGRectGetWidth(self.view.frame);
    CGFloat height = CGRectGetHeight(self.view.frame);

    if (!_isShow) {
        //贝赛尔曲线滑入
//        [self.testView showInView_curve:self.view startCenter:CGPointMake(0, 0) endCenter:CGPointMake(width/2, height/2)];

        //直线滑入
        [self.testView showInView_curve:self.view startCenter:CGPointMake(width/2, 0) endCenter:CGPointMake(width/2, height/2)];

    }else{

//       [self.testView removeFromSuperView_curveWithStartCenter:self.testView.center endCenter:CGPointMake(width, height)];
        [self.testView removeFromSuperView_curveWithStartCenter:self.testView.center endCenter:CGPointMake(width/2, height)];
    }
}

- (IBAction)Clickin:(UIButton *)sender {

    CGFloat width = CGRectGetWidth(self.view.frame);
    CGFloat height = CGRectGetHeight(self.view.frame);

    if (!_isShow) {
        [self.testView showInView_Moved:self.view startCenter:CGPointMake(0,0) endCenter:CGPointMake(width/2, height/2)];

    }else{

        [self.testView removeFromSuperView_MovedWithEndCenter:CGPointMake(width, height)];
    }

}
- (IBAction)CATransitionTest:(UIButton *)sender {

    CGFloat width = CGRectGetWidth(self.view.frame);
    CGFloat height = CGRectGetHeight(self.view.frame);
    self.testView.center = CGPointMake(width/2, height/2);

    if (!_isShow) {
        [self.testView showInview_Animation:self.view type:kCATransitionMoveIn subType:nil];

    }else{

        [self.testView removeFromSuperView_AnimationWithType:@"rippleEffect" subType:nil];

    }
}
- (IBAction)shake:(UIButton *)sender {

    CGFloat width = CGRectGetWidth(self.view.frame);
    CGFloat height = CGRectGetHeight(self.view.frame);
    self.testView.center = CGPointMake(width/2, height/2);

    [self.view addSubview:self.testView];
    [self.testView shake];
}

自己封装的类别中添加了三个属性,关键性代码为:

//声明
@property(nonatomic,assign) CGFloat animationTime;
@property(nonatomic,strong) CompletionBlock finishedIn;
@property(nonatomic,strong) CompletionBlock finishedOut;

使用关联,写三个属性的get和set方法:

#pragma mark - 添加animationTime,两个block属性

-(void)setAnimationTime:(CGFloat)animationTime{
    return objc_setAssociatedObject(self, @selector(animationTime),[NSNumber numberWithFloat:animationTime], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

-(CGFloat)animationTime{

    NSNumber *timeValue = objc_getAssociatedObject(self, _cmd);
    return timeValue.floatValue==0?0.3:timeValue.floatValue;
}

-(void)setFinishedIn:(CompletionBlock)finishedIn{
    return objc_setAssociatedObject(self, @selector(finishedIn), finishedIn, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(CompletionBlock)finishedIn{
    return objc_getAssociatedObject(self, _cmd);
}

-(void)setFinishedOut:(CompletionBlock)finishedOut{
    return objc_setAssociatedObject(self, @selector(finishedOut), finishedOut, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(CompletionBlock)finishedOut{
    return objc_getAssociatedObject(self, _cmd);
}

Demo中只有部分动画效果,为了方便使用,在后续编码时遇到其他常用动画效果会慢慢填充进去。

时间: 2024-10-14 00:34:32

各种动画集合的相关文章

Android补间动画集合

安卓提供的Api四种动画: 动画常用API: 1 setDuration(3000); //动画播放时间毫秒 2 setFillAfter(true); //显示动画结束时View的样子,动画结束时View长啥样,之后的显示就长啥样 3 setRepeatCount(5); //重复播放次数 淡入淡出:AlphaAnimation 最简单的动画,透明到显示或者显示到透明的动画. 1 public void alpha(View view){ 2 float fromAlpha = 0.1f; /

Android视图动画集合AndoridViewAnimations

Android视图动画集合AndoridViewAnimations Android视图动画是针对视图对象的动画效果,包括对象平移.旋转.缩放和渐变四种类型.通过组合这四种类型,可以创建出无数种动画效果.AndroidViewAnimations是一个Android视图动画集合.该集合预置了13大类六十三种动画.该集合使用非常简单.开发者只要指定动画类型.播放时间.延迟等几个属性,就可以为指定视图对象创建动画效果. 原文地址:https://www.cnblogs.com/daxueba-ITd

超酷jQuery进度条加载动画集合

在丰富多彩的网页世界中,进度条加载动画的形式非常多样,有利用gif图片实现的loading动画,也有利用jQuery和CSS3实现的进度加载动画,本文主要向大家介绍很多jQuery和CSS3实现的进度条加载动画,每一个都非常具有创意.如果你喜欢,可以下载源码并将它们应用到自己的网站中去. HTML5 Canvas发光Loading动画 它是一个Loading加载动画,并不能实现具体进度的加载,但是可以提示用户数据或者页面正在加载.并且该应用利用Canvas绘制动画,效果非常不错. DEMO演示 

CSS里面常用的动画集合

/* 印章效果 */ @-webkit-keyframes zoomIn { 0% { opacity:0; -webkit-transform: scale3d(10, 10, 10); transform: scale3d(10, 10,10); } 1%{ } 100% { opacity:1; -webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1,1); } } @keyframes zoomIn { 0% { opac

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

利用传感器(sensor)实现微信摇一摇动画

所需要的权限: <uses-permission android:name="android.permission.VIBRATE"></uses-permission> xml文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and

iOS Core Animation Advanced Techniques-隐式动画

上六章节: 图层树 图层的寄宿图 图层几何学 图层视觉效果 图层变换 专用图层 这篇随笔主要介绍有关图层隐式动画. 隐式动画: 没有指定任何动画类型,而改变了一个属性,Core Animation决定如何并且何时去做动画. 动画执行的事件取决于当前事务的设置: 动画类型取决于图层行为. Core Animation假设屏幕上任何东西都可能做动画,默认动画效果是打开的. 当CALayer的一个 可做动画的 属性 被改变,默认从先前值平滑过渡到新值,而不是立刻显示新值在屏幕上,因此携带了隐式动画.

ANDROID动画分类

Android 平台提供了一套完整的动画框架,在Android3.0之前有两种动画Tween Animation(补间动画)和Frame Animation(帧动画), 对应SDK中的View Animation和Drawable Animation. 在Android3.0之后,新增了一种动画Property Animation(属性动画).   一: 补间动画(res/anim/ ) Tween Animation可以对view实现一系列的转换,给出两个关键帧,通过一些算法将给定属性值在给定

Android学习之 属性动画&lt;Property Animation&gt;

property 动画系统是相当健壮的框架,它几乎可以动画显示任何对象. 你可以定义一个动画来定时改变任何对象的属性值,不论该对象是否在屏幕上显示. property 动画将以一定的时间间隔修改属性值(对象中的字段值). 要实现动画显示,你须指定对象的相应属性(比如对象的屏幕位置),以及动画时长.动画时间间隔. property 动画系统能让你设定以下动画要素: 1.持续时间:指定动画的持续显示时间.默认的时长是300毫秒. 2.插值因子:指定属性值的变化方式,表示为关于动画已显示时间的函数.