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

UIView 动画的参数传递 与 自定义方法

 

你可能感兴趣的:(UIView)