• IOS动画总结


    一.@interface UIView(UIViewAnimation)

    + (void)beginAnimations:(NSString *)animationID context:(void *)context;  // additional context info passed to will start/did stop selectors. begin/commit can be nested

    + (void)commitAnimations;                                                 // starts up any animations when the top level animation is commited

     // no getters. if called outside animation block, these setters have no effect.

    + (void)setAnimationDelegate:(id)delegate;                          // default = nil

    + (void)setAnimationWillStartSelector:(SEL)selector;                // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context

    + (void)setAnimationDidStopSelector:(SEL)selector;                  // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

    + (void)setAnimationDuration:(NSTimeInterval)duration;              // default = 0.2

    + (void)setAnimationDelay:(NSTimeInterval)delay;                    // default = 0.0

    + (void)setAnimationStartDate:(NSDate *)startDate;                  // default = now ([NSDate date])

    + (void)setAnimationCurve:(UIViewAnimationCurve)curve;              // default = UIViewAnimationCurveEaseInOut

    + (void)setAnimationRepeatCount:(float)repeatCount;                 // default = 0.0.  May be fractional

    + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;    // default = NO. used if repeat count is non-zero

    + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState;  // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).

    + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache;  // current limitation - only one per begin/commit block

     + (void)setAnimationsEnabled:(BOOL)enabled;                         // ignore any attribute changes while set.

    + (BOOL)areAnimationsEnabled;

    + (void)performWithoutAnimation:(void (^)(void))actionsWithoutAnimation NS_AVAILABLE_IOS(7_0);

    @end


    一个动画的举例

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationDuration:2.7];
    [UIView setAnimationTransition:transition forView:self.view cache:YES];
    // operation>>>
    [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
    // end<<<<<<
    [UIView commitAnimations];

    其中transition取值范围

    typedef enum {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
    } UIViewAnimationTransition;

    特点:基础,使用方便,但是效果有限

    二.@interface UIView(UIViewAnimationWithBlocks)

    + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

    + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0

    + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0, completion = NULL

    + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);

    + (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

    + (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // toView added to fromView.superview, fromView removed from its superview

    + (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray *)views options:(UIViewAnimationOptions)options animations:(void (^)(void))parallelAnimations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);

    @end

    一个动画举例:

    [UIView animateWithDuration:0.7 delay:0 options:0 animations:^(){
    self.view.alpha = 0.2;
    [self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
    self.view.alpha = 1;
    } completion:^(BOOL finished)
    {

    }];

    当areAnimationsEnabled为NO时,上面不能动画显示

    [UIView transitionFromView:lImage toView:mImage duration:0.7 options:options completion:^(BOOL finished)
    {
    if (finished) {
    [self.view addSubview:lImage];
    [self.view sendSubviewToBack:lImage];
    [self.view sendSubviewToBack:mImage];

    }];

    options取值范围

    enum {
    UIViewAnimationOptionLayoutSubviews = 1 << 0,
    UIViewAnimationOptionAllowUserInteraction = 1 << 1, // turn on user interaction while animating
    UIViewAnimationOptionBeginFromCurrentState = 1 << 2, // start all views from current value, not initial value
    UIViewAnimationOptionRepeat = 1 << 3, // repeat animation indefinitely
    UIViewAnimationOptionAutoreverse = 1 << 4, // if repeat, run animation back and forth
    UIViewAnimationOptionOverrideInheritedDuration = 1 << 5, // ignore nested duration
    UIViewAnimationOptionOverrideInheritedCurve = 1 << 6, // ignore nested curve
    UIViewAnimationOptionAllowAnimatedContent = 1 << 7, // animate contents (applies to transitions only)
    UIViewAnimationOptionShowHideTransitionViews = 1 << 8, // flip to/from hidden state instead of adding/removing

    UIViewAnimationOptionCurveEaseInOut = 0 << 16, // default
    UIViewAnimationOptionCurveEaseIn = 1 << 16,
    UIViewAnimationOptionCurveEaseOut = 2 << 16,
    UIViewAnimationOptionCurveLinear = 3 << 16,

    UIViewAnimationOptionTransitionNone = 0 << 20, // default
    UIViewAnimationOptionTransitionFlipFromLeft = 1 << 20,
    UIViewAnimationOptionTransitionFlipFromRight = 2 << 20,
    UIViewAnimationOptionTransitionCurlUp = 3 << 20,
    UIViewAnimationOptionTransitionCurlDown = 4 << 20,
    UIViewAnimationOptionTransitionCrossDissolve = 5 << 20,//ios5
    UIViewAnimationOptionTransitionFlipFromTop = 6 << 20,//ios5
    UIViewAnimationOptionTransitionFlipFromBottom = 7 << 20,//ios5
    };
    typedef NSUInteger UIViewAnimationOptions;

    特点:快捷方便,效果更多.

    对于不太复杂的动画,上面的写法很精练,因为只有一条语句,如果动画太过复杂了,写在这样一条语句中就会显得冗长了,对于代码调试没那么方便。

    三:Core animation


    core animation是以objc语言封装的一套图形渲染,投影以及动画的库的结合,使创建的用户界面变得非常容易,通过以下方法:
    1:使用简单的编程方法实现高性能的合成
    2:使用层对象创建复杂的用户界面。
    3:轻量型数据结构,能够同时使几百个层产生动画。
    4:不依赖于应用的主线程,动画在单独的线程里运行
    5:改进了应用程序性能。应用程序只需要重画它变化的部分(局部刷新)。
    6:灵活的布局管理方式

  • 相关阅读:
    IIS6.0PUT漏洞的利用
    练习1--利用python获取百度前3页搜索结果(可更改页数)
    笔记整理6——用python实现IP流量分析
    Django ORM 那些相关操作
    Django 中得ORM介绍和字段及字段参数
    Django 的 路由系统
    Django
    Django 的 之 视图
    Django 框架
    Django 中ORM 的使用
  • 原文地址:https://www.cnblogs.com/417460188dy/p/3860609.html
Copyright © 2020-2023  润新知