我正在尝试用2009年的书来学习动画,据我所知,在iOS4中制作动画的首选方法是使用块。我正在阅读的这本书使用了旧方法,我一直试图将其翻译成新方法,但收效甚微。
这本书的内容如下:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:animationTimer];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDidStopSelector:@selector(lastAnimationZero)];
//animations
[UIView commitAnimations];
我的(显然是失败的)翻译:
[UIView animateWithDuration:animationTimer
options: (UIViewAnimationOptionAllowUserInteraction |
UIViewAnimationOptionCurveEaseOut)
animations: ^
{
animation
}
completion:^(BOOL finished)
{
lastAnimation = 0;
}];
每次我运行它时(使用块方法)获取“程序接收信号:”SIGABRT“并且控制台显示
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+
[UIView animateWithDuration:options:animations:completion:]: unrecognized selector sent to class 0x8393b4'
答案 0 :(得分:2)
检查UIVIew的文档。没有这样的方法。 你写块语法的方式还可以,只需发送正确的信息。
此外,将“动画”替换为您需要的说明,本书不会告诉您,旧版本中的[UIView setAnimationDidStopSelector:
@selector(lastAnimationZero)];
实际上是动画停止时发出的消息,并且不应该t直接翻译为lastAnimation = 0;
。
以下是您可能想要使用的方法文档的link。
+(void)animateWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;