【iOS开发】30多个iOS常用动画,带详细注释

30多个iOS常用动画,带详细注释
//
// CoreAnimationEffect.h
// CoreAnimationEffect
//
// Created by VincentXue on 13-1-19.
// Copyright (c) 2013年 VincentXue. All rights reserved.
//

import

 

@interface CoreAnimationEffect : NSObject

pragma mark - Custom Animation

 

  • (void)showAnimationType:(NSString *)type withSubType:(NSString *)subType duration:(CFTimeInterval)duration timingFunction:(NSString *)timingFunction view:(UIView *)theView;

pragma mark - Preset Animation

 

// reveal
+ (void)animationRevealFromBottom:(UIView *)view;
+ (void)animationRevealFromTop:(UIView *)view;
+ (void)animationRevealFromLeft:(UIView *)view;
+ (void)animationRevealFromRight:(UIView *)view;

// 渐隐渐消
+ (void)animationEaseIn:(UIView *)view;
+ (void)animationEaseOut:(UIView *)view;

// 翻转
+ (void)animationFlipFromLeft:(UIView *)view;
+ (void)animationFlipFromRigh:(UIView *)view;

// 翻页
+ (void)animationCurlUp:(UIView *)view;
+ (void)animationCurlDown:(UIView *)view;

// push
+ (void)animationPushUp:(UIView *)view;
+ (void)animationPushDown:(UIView *)view;
+ (void)animationPushLeft:(UIView *)view;
+ (void)animationPushRight:(UIView *)view;

// move
+ (void)animationMoveUp:(UIView *)view duration:(CFTimeInterval)duration;
+ (void)animationMoveDown:(UIView *)view duration:(CFTimeInterval)duration;
+ (void)animationMoveLeft:(UIView *)view;
+ (void)animationMoveRight:(UIView *)view;

// 旋转缩放

// 各种旋转缩放效果
+ (void)animationRotateAndScaleEffects:(UIView *)view;

// 旋转同时缩小放大效果
+ (void)animationRotateAndScaleDownUp:(UIView *)view;

pragma mark - Private API

 

  • (void)animationFlipFromTop:(UIView *)view;
  • (void)animationFlipFromBottom:(UIView *)view;
  • (void)animationCubeFromLeft:(UIView *)view;
  • (void)animationCubeFromRight:(UIView *)view;
  • (void)animationCubeFromTop:(UIView *)view;
  • (void)animationCubeFromBottom:(UIView *)view;
  • (void)animationSuckEffect:(UIView *)view;
  • (void)animationRippleEffect:(UIView *)view;
  • (void)animationCameraOpen:(UIView *)view;
  • (void)animationCameraClose:(UIView *)view;

@end

//
// CoreAnimationEffect.m
// CoreAnimationEffect
//
// Created by VincentXue on 13-1-19.
// Copyright (c) 2013年 VincentXue. All rights reserved.
//

import "CoreAnimationEffect.h"

import

@implementation CoreAnimationEffect

 

pragma mark - Custom Animation

// animation.removedOnCompletion = NO;


** type
 *
 *  各种动画效果  其中除了'fade', `moveIn', `push' , `reveal' ,其他属于私有的API(我是这么认为的,可以点进去看下注释).
 *  ↑↑↑上面四个可以分别使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'来调用.
 *  @"cube"                     立方体翻滚效果
 *  @"moveIn"                   新视图移到旧视图上面
 *  @"reveal"                   显露效果(将旧视图移开,显示下面的新视图)
 *  @"fade"                     交叉淡化过渡(不支持过渡方向)             (默认为此效果)
 *  @"pageCurl"                 向上翻一页
 *  @"pageUnCurl"               向下翻一页
 *  @"suckEffect"               收缩效果,类似系统最小化窗口时的神奇效果(不支持过渡方向)
 *  @"rippleEffect"             滴水效果,(不支持过渡方向)
 *  @"oglFlip"                  上下左右翻转效果
 *  @"rotate"                   旋转效果
 *  @"push"
 *  @"cameraIrisHollowOpen"     相机镜头打开效果(不支持过渡方向)
 *  @"cameraIrisHollowClose"    相机镜头关上效果(不支持过渡方向)
 *

** type
 *
 *  kCATransitionFade            交叉淡化过渡
 *  kCATransitionMoveIn          新视图移到旧视图上面
 *  kCATransitionPush            新视图把旧视图推出去
 *  kCATransitionReveal          将旧视图移开,显示下面的新视图
 */

animation.type = type;

** subtype
 *
 *  各种动画方向
 *
 *  kCATransitionFromRight;      同字面意思(下同)
 *  kCATransitionFromLeft;
 *  kCATransitionFromTop;
 *  kCATransitionFromBottom;
 *

** subtype
 *
 *  当type为@"rotate"(旋转)的时候,它也有几个对应的subtype,分别为:
 *  90cw    逆时针旋转90°
 *  90ccw   顺时针旋转90°
 *  180cw   逆时针旋转180°
 *  180ccw  顺时针旋转180°
 *

**
 *  type与subtype的对应关系(必看),如果对应错误,动画不会显现.
 *
 *  @see http://iphonedevwiki.net/index.php/CATransition
 *

animation.subtype = subType;

**
 *  所有核心动画和特效都是基于CAAnimation,而CAAnimation是作用于CALayer的.所以把动画添加到layer上.
 *  forKey  可以是任意字符串.
 *

[theView.layer addAnimation:animation forKey:nil];

}

pragma mark - Preset Animation

  • (void)animationRevealFromBottom:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setType:kCATransitionReveal];
    [animation setSubtype:kCATransitionFromBottom];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationRevealFromTop:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setType:kCATransitionReveal];
    [animation setSubtype:kCATransitionFromTop];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationRevealFromLeft:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setType:kCATransitionReveal];
    [animation setSubtype:kCATransitionFromLeft];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationRevealFromRight:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setType:kCATransitionReveal];
    [animation setSubtype:kCATransitionFromRight];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationEaseIn:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setType:kCATransitionFade];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationEaseOut:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setType:kCATransitionFade];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];

    [view.layer addAnimation:animation forKey:nil];
    }

 

  • (void)animationFlipFromLeft:(UIView *)view
    {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.35f];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view cache:NO];
    [UIView commitAnimations];
    }
  • (void)animationFlipFromRigh:(UIView *)view
    {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.35f];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:view cache:NO];
    [UIView commitAnimations];
    }
  • (void)animationCurlUp:(UIView *)view
    {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [UIView setAnimationDuration:0.35f];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:view cache:NO];
    [UIView commitAnimations];
    }
  • (void)animationCurlDown:(UIView *)view
    {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDuration:0.35f];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:view cache:NO];
    [UIView commitAnimations];
    }
  • (void)animationPushUp:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromTop];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationPushDown:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromBottom];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationPushLeft:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromLeft];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationPushRight:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromRight];

    [view.layer addAnimation:animation forKey:nil];
    }

// presentModalViewController
+ (void)animationMoveUp:(UIView *)view duration:(CFTimeInterval)duration
{
CATransition *animation = [CATransition animation];
[animation setDuration:duration];
[animation setFillMode:kCAFillModeForwards];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[animation setType:kCATransitionMoveIn];
[animation setSubtype:kCATransitionFromTop];

1

[view.layer addAnimation:animation forKey:nil];

}

// dissModalViewController
+ (void)animationMoveDown:(UIView *)view duration:(CFTimeInterval)duration
{
CATransition *transition = [CATransition animation];
transition.duration =0.4;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionReveal;
transition.subtype = kCATransitionFromBottom;
[view.layer addAnimation:transition forKey:nil];
}

  • (void)animationMoveLeft:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:kCATransitionMoveIn];
    [animation setSubtype:kCATransitionFromLeft];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationMoveRight:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:kCATransitionMoveIn];
    [animation setSubtype:kCATransitionFromRight];

    [view.layer addAnimation:animation forKey:nil];
    }

+(void)animationRotateAndScaleEffects:(UIView )view
{
[UIView animateWithDuration:0.35f animations:^
{
/*
* @see http://donbe.blog.163.com/blog/static/138048021201061054243442/
*
* @param transform 形变属性(结构体),可以利用这个属性去对view做一些翻转或者缩放.详解请猛戳↑URL.
*
* @method valueWithCATransform3D: 此方法需要一个CATransform3D的结构体.一些非详细的讲解可以看下面的URL
*
* @see http://blog.csdn.net/liubo0_0/article/details/7452166
*
*/



animation.type = type;

animation.subtype = subType;

[theView.layer addAnimation:animation forKey:nil];

}

 

 

  • (void)animationRotateAndScaleDownUp:(UIView *)view
    {
    CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat:(2 * M_PI) * 2];
    rotationAnimation.duration = 0.35f;
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    scaleAnimation.toValue = [NSNumber numberWithFloat:0.0];
    scaleAnimation.duration = 0.35f;
    scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
    animationGroup.duration = 0.35f;
    animationGroup.autoreverses = YES;
    animationGroup.repeatCount = 1;
    animationGroup.animations =[NSArray arrayWithObjects:rotationAnimation, scaleAnimation, nil];
    [view.layer addAnimation:animationGroup forKey:@"animationGroup"];
    }

pragma mark - Private API

  • (void)animationFlipFromTop:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"oglFlip"];
    [animation setSubtype:@"fromTop"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationFlipFromBottom:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"oglFlip"];
    [animation setSubtype:@"fromBottom"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationCubeFromLeft:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"cube"];
    [animation setSubtype:@"fromLeft"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationCubeFromRight:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"cube"];
    [animation setSubtype:@"fromRight"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationCubeFromTop:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"cube"];
    [animation setSubtype:@"fromTop"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationCubeFromBottom:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"cube"];
    [animation setSubtype:@"fromBottom"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationSuckEffect:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"suckEffect"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationRippleEffect:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"rippleEffect"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationCameraOpen:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"cameraIrisHollowOpen"];
    [animation setSubtype:@"fromRight"];

    [view.layer addAnimation:animation forKey:nil];
    }

  • (void)animationCameraClose:(UIView *)view
    {
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.35f];
    [animation setFillMode:kCAFillModeForwards];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
    [animation setType:@"cameraIrisHollowClose"];
    [animation setSubtype:@"fromRight"];

    [view.layer addAnimation:animation forKey:nil];
    }
    @end

时间: 2024-10-27 23:19:08

【iOS开发】30多个iOS常用动画,带详细注释的相关文章

iOS开发CoreAnimation解读之四——Layer层动画内容

iOS开发CoreAnimation解读之四--Layer层动画内容 一.引言         通过前几篇博客的介绍,我们可以了解到layer层可以设置许多与控件UI相关的属性,并且对于iOS开发,UIView层的属性是会映射到CALayer的,因此,可以通过UIKit和CoreAnimation两个框架来设置控件的UI相关属性,当属性发生变化时,我们可以使其展示一个动画效果. 二.CAAnimation动画体系的介绍         CAAnimation是CoreAnimation框架中执行

iOS 开发库概要(iOS Developer Library Summary)

  iOS 开发库概要(iOS Developer Library Summary) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 注:多好的一篇总结,可惜了,被大篇幅的细节拖累,看官们都生惧

精通ios开发 第七...-精通iOS开发 第七版 第十四章 书上例子错误

问题描述 精通iOS开发 第七版 第十四章 书上例子错误 精通iOS开发 第7版 十四章 书上例子在Xcode7.2上运行不了!怎么改? 解决方案 在哪里买的书,赶快要求退货吧,噗次 解决方案二: 7.2的语法可能有更新了 你需要修正代码 毕竟书是对应老版本xcode

IOS 30多个iOS常用动画,带详细注释

[cpp] view plaincopy //   //  CoreAnimationEffect.h   //  CoreAnimationEffect   //   //  Created by VincentXue on 13-1-19.   //  Copyright (c) 2013年 VincentXue. All rights reserved.   //       #import <Foundation/Foundation.h>       /**   !  导入Quart

iOS开发中使用UIDynamic来捕捉动画组件的重力行为_IOS

UIDynamic基本认识 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如:重力.弹性碰撞等现象   2.物理引擎的价值 广泛用于游戏开发,经典成功案例是"愤怒的小鸟" 让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果 提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏   3.知名的2D物理引擎 Box2d Chipmunk   二.使用

Ios开发之 -- js和ios的交互

==WebViewJavascriptBridge的介绍==#下载:https://github.com/marcuswestin/WebViewJavascriptBridge#关于WebViewJavascriptBridge的介绍:http://blog.csdn.net/yanghua_kobe/article/details/8209751==WebViewJavascriptBridge(在与现有的业务代码结合使用中)的小问题==*demo部分(  ExampleApp.html界面

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片     与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存.      异步加载图片的核心代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 5

iOS开发笔记 4、iOS中的Cocoa、设计模式等

Cocoa中常用的类 NSStringNSMutableString 赋值 NSString *myString = @"some string"; NSString *myString = [NSStringstringWithFormat:@"object = %@",someObject]; 转换 NSString *upper = [myStringuppercaseString]; intintString = [myStringintValue]; 去内

ios截屏代码,ios开发截屏,ios网页截屏代码

ios开发过程中可以对任何视图进行截屏,包括网页和视频,我写了一个方法: - (UIImage*)snapViewToImage:(UIView*)currentView{     UIGraphicsBeginImageContext(self.view.frame.size);     CGContextRef context=UIGraphicsGetCurrentContext();     [currentView.layer renderInContext:context];