我正在尝试使用样式将旧样式的动画转换为块。以下代码可以正常工作:
[UIView beginAnimations:@"ResizeAndMove" context:nil];
[UIView setAnimationDuration:3];
[UIView setAnimationDelay:0];
[UIView setAnimationBeginsFromCurrentState:YES];
selected_view.frame = targetSlot.frame;
selected_view.center = targetSlot.center;
[UIView commitAnimations];
但这转换不了起作用:
[UIView animateWithDuration:.3f
animations:^{
selected_view.frame = targetSlot.frame;
selected_view.center = targetSlot.center;
}
];
它说:
2012-10-17 12:32:50.256 myapp[311:207] *** +[UIView
animateWithDuration:animations:]: unrecognized selector sent to class
0x21b989c 2012-10-17 12:32:50.259 myapp[311:207] *** Terminating app
due to uncaught exception 'NSInvalidArgumentException', reason: '***
+[UIView animateWithDuration:animations:]: unrecognized selector sent to class 0x21b989c'
我正在使用带有iPad模拟器的ios 4.1。编译好但总是崩溃。无法弄清楚什么是错的。甚至来自apple dev的简单例子:
[UIView animateWithDuration:0.2
animations:^{view.alpha = 0.0;}
completion:^(BOOL finished){ [view removeFromSuperview]; }];
以相同的方式工作 - 它只是使用相同的消息崩溃(只有“完成:”添加)。 争论有什么不对?哪个论点呢?我是否需要导入一些内容来添加块的支持?但它汇编得很好...... 我甚至可以在UIKit / UIView中看到:
...
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0); // delay = 0.0, options = 0, completion = NULL
...
答案 0 :(得分:0)
您最近是否升级到xcode 4.5,因为这不再支持ios 4.1。
我唯一能想到的是你使用的变量在块中使用是不安全的。为了使它们安全,只需在初始化变量时添加__block。看起来很奇怪!
答案 1 :(得分:0)
NSTimeInterval不是浮点数。它的双倍。这就是你的原始代码有效的原因。
答案 2 :(得分:0)
安装较新版本的XCode解决了这个问题。在安装之前,我使用sudo删除了当前版本的XCode。