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

     
  • 相关阅读:
    团队冲刺第四天
    团队冲刺第三天
    找1的个数
    寻找最水之王
    最优价格买书
    团队冲刺第二天
    团队冲刺第一天
    团队开发项目特点
    第一阶段冲刺站立会议报告——4
    第一阶段冲刺站立会议报告——3
  • 原文地址:https://www.cnblogs.com/hyhl23/p/4170324.html
Copyright © 2011-2022 走看看