zoukankan      html  css  js  c++  java
  • UIView 动画的参数传递 与 自定义方法

    1.UIView 动画可以传递参数的地方有三个:

    1  + (void)beginAnimations:(NSString *)animationID context:(void *)context
    2  
    3  + (void)setAnimationWillStartSelector:(SEL)selector;                // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context 系统默认的动画开始时执行的方法
    4 
    5  + (void)setAnimationDidStopSelector:(SEL)selector;                  // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 系统默认的动画结束时调用的方法

    观察者三个地方的参数,分别是:

    (NSString *)animationID:给这个动画一个ID,就像每个人都有一个身份证一样,用来标识这个动画,类型是字符串类型,对应于动画结束方法的第一个参数

    (void *)context:类型是 void * 表示任意指针类型;这个参数可以将需要进行动画的对象向下传递,对应于动画结束方法中的第三个参数。

    (NSNumber *)finished (这个只在动画结束的方法中出现):这个参数是由系统生成的,表示动画块是否成功结束,一般不使用。

    这几个参数的使用是一一对应的,在 UIView 的参数传递,其个数与参数类型都是固定的。

    2.动画的自定义方法

    可以给动画添加自定义方法,可以添加自定义方法的地方有两个,分别是

    [ UIView setAnimationWillStartSelector:@selector(methodName)] —— 给动画添加自定义的动画开始方法

    [ UIViewsetAnimationDidStopSelector:@selector(methodName)] —— 给动画添加自定义的动画结束方法

    在给动画添加自定义方法之前一定要先改动画设置代理,指定由谁来调用这个方法,即 

    [ UIView setAnimationDelegate: self ]; //一般都是设置成 self, 由这个类本身来调用这个方法 

    如果设置了代理,没有添加自定义方法,会自动调用两个默认的动画开始与结束方法。

    添加自己的方法,可以是两种:

    无参数;

    有参数:如果现在有一个动画结束时需要调用的方法,且希望可以传递参数,则 参数有且只有三个,并且就是默认结束方法中的参数

     1 #import "HUAppDelegate.h"
     2 
     3 @implementation HUAppDelegate
     4 
     5 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
     6 {
     7     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
     8     // Override point for customization after application launch.
     9     self.window.backgroundColor = [UIColor colorWithRed:0 green:0.7 blue:1 alpha:0.5];
    10     [self.window makeKeyAndVisible];
    11     
    12     UIImageView *bg = [[UIImageView alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    13     bg.image = [UIImage imageNamed:@"bg.jpg"];
    14     [self.window addSubview:bg];
    15     
    16     [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(snowDown) userInfo:nil repeats:YES];
    17     
    18     return YES;
    19 }
    20 
    21 //定时器调用的方法,每次创建一个 UIImageView 的对象(一朵雪花)
    22 - (void)snowDown
    23 {
    24     UIImageView *snow = [[UIImageView alloc] initWithFrame:CGRectMake(arc4random() % 320, -20, 20, 20)];
    25     snow.image = [UIImage imageNamed:@"flake.png"];
    26     [self.window addSubview:snow];
    27     
    28     //将这多雪花向下传递,并给这多雪花一个身份叫做融化
    29     [UIView beginAnimations:@"melt" context:snow];
    30     [UIView setAnimationDuration:5];
    31     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    32     [UIView setAnimationDelegate:self];
    33     [UIView setAnimationDidStopSelector:@selector(didEndStop: finished: context:)];
    34     snow.frame = CGRectMake(arc4random() % 320, 460, 20, 20);
    35     [UIView commitAnimations];
    36 }
    37 
    38 //动画结束时调用的方法
    39 - (void)didEndStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)aSnow
    40 {
    41      UIImageView *imageView = (UIImageView *)aSnow;
    42     if ([animationID isEqualToString:@"melt"])
    43     {
    44         //雪花融化结束后移除该雪花的 UIImageView 对象
    45         [UIView beginAnimations:@"disappear" context:imageView];
    46         [UIView setAnimationDuration:2];
    47         [UIView setAnimationDelegate:self];
    48         [UIView setAnimationDidStopSelector:@selector(didEndStop: finished: context:)];
    49         imageView.alpha = 0;
    50         [UIView commitAnimations];
    51     }
    52     if ([animationID isEqualToString:@"disappear"])
    53     {
    54         [imageView removeFromSuperview];
    55     }
    56 }
    57 
    58 @end
    View Code

     
  • 相关阅读:
    垃圾回收器总结(一)
    JVM 总结
    如何提升自己?
    堆和栈的区别
    Java 8 Streams API 详解
    说一说JVM双亲委派机制与Tomcat
    说一说switch关键字的奥秘
    深入了解 Java Resource && Spring Resource
    Spring 动态代理 之 but was actually of type 'com.sun.proxy.$Proxy14 Exception
    架构设计基础:单服务.集群.分布式,基本区别和联系
  • 原文地址:https://www.cnblogs.com/hyhl23/p/4170324.html
Copyright © 2011-2022 走看看