0

我正在尝试使用样式将旧样式动画转换为块。以下代码工作正常:

[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。它编译正常,但总是崩溃。想不通怎么回事。甚至来自苹果开发的简单示例:

[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
...
4

3 回答 3

0

您最近是否升级到 xcode 4.5,因为它不再支持 ios 4.1。

我能想到的唯一另一件事是您正在使用的变量在块中使用是不安全的。为了使它们安全,只需在初始化变量时添加 __block 。好像很奇怪啊!

于 2012-10-17T09:31:24.567 回答
0

NSTimeInterval 不是浮点数。它是双倍的。这就是您的原始代码有效的原因。

于 2012-10-17T09:54:50.043 回答
0

安装更新版本的 XCode 解决了这个问题。在安装之前,我使用 sudo 删除了我当前版本的 XCode。

于 2012-10-18T14:10:26.133 回答