UIView 动画的参数传递 与 自定义方法
2014-12-17 20:34
316 查看
1.UIView 动画可以传递参数的地方有三个:
观察者三个地方的参数,分别是:
(NSString *)animationID:给这个动画一个ID,就像每个人都有一个身份证一样,用来标识这个动画,类型是字符串类型,对应于动画结束方法的第一个参数
(void *)context:类型是 void * 表示任意指针类型;这个参数可以将需要进行动画的对象向下传递,对应于动画结束方法中的第三个参数。
(NSNumber *)finished (这个只在动画结束的方法中出现):这个参数是由系统生成的,表示动画块是否成功结束,一般不使用。
这几个参数的使用是一一对应的,在 UIView 的参数传递,其个数与参数类型都是固定的。
2.动画的自定义方法
可以给动画添加自定义方法,可以添加自定义方法的地方有两个,分别是
[ UIView setAnimationWillStartSelector:@selector(methodName)] —— 给动画添加自定义的动画开始方法
[ UIViewsetAnimationDidStopSelector:@selector(methodName)] —— 给动画添加自定义的动画结束方法
在给动画添加自定义方法之前一定要先改动画设置代理,指定由谁来调用这个方法,即
[ UIView setAnimationDelegate: self ]; //一般都是设置成 self, 由这个类本身来调用这个方法
如果设置了代理,没有添加自定义方法,会自动调用两个默认的动画开始与结束方法。
添加自己的方法,可以是两种:
无参数;
有参数:如果现在有一个动画结束时需要调用的方法,且希望可以传递参数,则 参数有且只有三个,并且就是默认结束方法中的参数
View Code
+ (void)beginAnimations:(NSString *)animationID context:(void *)context + (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 系统默认的动画结束时调用的方法
观察者三个地方的参数,分别是:
(NSString *)animationID:给这个动画一个ID,就像每个人都有一个身份证一样,用来标识这个动画,类型是字符串类型,对应于动画结束方法的第一个参数
(void *)context:类型是 void * 表示任意指针类型;这个参数可以将需要进行动画的对象向下传递,对应于动画结束方法中的第三个参数。
(NSNumber *)finished (这个只在动画结束的方法中出现):这个参数是由系统生成的,表示动画块是否成功结束,一般不使用。
这几个参数的使用是一一对应的,在 UIView 的参数传递,其个数与参数类型都是固定的。
2.动画的自定义方法
可以给动画添加自定义方法,可以添加自定义方法的地方有两个,分别是
[ UIView setAnimationWillStartSelector:@selector(methodName)] —— 给动画添加自定义的动画开始方法
[ UIViewsetAnimationDidStopSelector:@selector(methodName)] —— 给动画添加自定义的动画结束方法
在给动画添加自定义方法之前一定要先改动画设置代理,指定由谁来调用这个方法,即
[ UIView setAnimationDelegate: self ]; //一般都是设置成 self, 由这个类本身来调用这个方法
如果设置了代理,没有添加自定义方法,会自动调用两个默认的动画开始与结束方法。
添加自己的方法,可以是两种:
无参数;
有参数:如果现在有一个动画结束时需要调用的方法,且希望可以传递参数,则 参数有且只有三个,并且就是默认结束方法中的参数
#import "HUAppDelegate.h" @implementation HUAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor colorWithRed:0 green:0.7 blue:1 alpha:0.5]; [self.window makeKeyAndVisible]; UIImageView *bg = [[UIImageView alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; bg.image = [UIImage imageNamed:@"bg.jpg"]; [self.window addSubview:bg]; [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(snowDown) userInfo:nil repeats:YES]; return YES; } //定时器调用的方法,每次创建一个 UIImageView 的对象(一朵雪花) - (void)snowDown { UIImageView *snow = [[UIImageView alloc] initWithFrame:CGRectMake(arc4random() % 320, -20, 20, 20)]; snow.image = [UIImage imageNamed:@"flake.png"]; [self.window addSubview:snow]; //将这多雪花向下传递,并给这多雪花一个身份叫做融化 [UIView beginAnimations:@"melt" context:snow]; [UIView setAnimationDuration:5]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(didEndStop: finished: context:)]; snow.frame = CGRectMake(arc4random() % 320, 460, 20, 20); [UIView commitAnimations]; } //动画结束时调用的方法 - (void)didEndStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)aSnow { UIImageView *imageView = (UIImageView *)aSnow; if ([animationID isEqualToString:@"melt"]) { //雪花融化结束后移除该雪花的 UIImageView 对象 [UIView beginAnimations:@"disappear" context:imageView]; [UIView setAnimationDuration:2]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(didEndStop: finished: context:)]; imageView.alpha = 0; [UIView commitAnimations]; } if ([animationID isEqualToString:@"disappear"]) { [imageView removeFromSuperview]; } } @end
View Code
相关文章推荐
- Androd自定义对话框Dialog视图及参数传递的实现方法
- dojo小例子(15)给dojo on的事件处理函数传递自定义参数的两种方法
- com中传递自定义类参数的解决方法
- call_user_func()的参数不能为引用传递 自定义替代方法
- Drupal中关于表单form的drupal_get_form方法如何传递自定义参数
- XFire实现自定义类型参数传递和调用返回自定义类型方法
- 使用xmlhttp.send()方法的参数来传递大容量的数据
- VBA调用C#对象方法,传递double数组参数
- JavaScript实现页面之间传递参数的方法
- 方法参数传递对象时声明选项的注意问题
- javascript实现页面之间传递参数的方法
- 在网页间传递参数的两种常用方法:Querystring和session。
- PB中调用API函数时传递数组参数的方法
- Asp.net页面之间传递参数的几种方法
- 窗口之间变量参数传递的实现方法
- JSP传递中文参数乱码问题的解决方法
- 页面之间传递参数得几种方法
- 关于exe文件传递参数方法
- asp.net 三种基本的参数传递方法(web forms)
- asp.net 三种基本的参数传递方法(web forms)