ios UIView动画使用块问题

时间:2012-10-17 08:43:44

标签: iphone ios ipad uiview uiviewanimation

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

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

3 个答案:

答案 0 :(得分:0)

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

我唯一能想到的是你使用的变量在块中使用是不安全的。为了使它们安全,只需在初始化变量时添加__block。看起来很奇怪!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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