objective-c - animateWithDuration 不起作用

标签 objective-c cocoa-touch

我正在尝试使用一些按钮和 Controller 为我的主视图设置动画,以便从屏幕右侧进入屏幕。问题是它没有动画,它只是直接进入完成状态。

这是我的代码:

UIStoryboard* storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
options = [storyBoard instantiateViewControllerWithIdentifier:@"OptionsView"];
options.delegate = self;        
[self.view addSubview:options.view];
options.view.center = CGPointMake(floor(total_width+options.view.frame.size.width/2)+10, floor(total_height/2));

[UIView animateWithDuration:0.5
                      delay:0.0
                    options: UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     options.view.center = CGPointMake(floor(total_width-options.view.frame.size.width/2)+10, floor(total_height/2));
                 } 
                 completion:^(BOOL finished){
                     NSLog(@"Done!");
                 }]; 

编辑

更奇怪的是,如果我将此动画放在另一个动画的完成 block 中,则此动画有效,但新动画无效。

    UIButton* boton = (UIButton*) sender;
    [UIView animateWithDuration:5.0
                          delay:0.0
                        options: UIViewAnimationOptionCurveLinear
                     animations:^{
                         boton.alpha = 0.0;

                         //Jumps directly to 0, animation doesn't work

                     } 
                     completion:^(BOOL finished){
                         [UIView animateWithDuration:0.5
                                               delay:0.0
                                             options: UIViewAnimationOptionCurveEaseInOut
                                          animations:^{
                                              options.view.center = CGPointMake(floor(total_width-options.view.frame.size.width/2)+10, floor(total_height/2));

                                              //It works now, but it doesn't take 5 seconds to start, it starts right away

                                          } 
                                          completion:^(BOOL finished){
                                              NSLog(@"Done!");
                                          }]; 

                     }];

最佳答案

animateWithDuration:... 调用之前的行直接将 center 分配给您正在设置动画的相同值。要么删除它,要么在那里分配初始 center 值。具有相同起始值和结束值的动画显然没有效果。

关于objective-c - animateWithDuration 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11330758/

相关文章:

ios - 我如何使用 Google Analytics 跟踪用户对 MFMailComposeViewController 的操作?

ios - 导航 Controller 中 UIViewController 缺少后退按钮

ios - 在 UICollectionView 中显示照片库图像

objective-c - 从 Swift 访问 Objective-C 变量/函数

cocoa-touch - 文本字段文本绘制在底部而不是中心

iphone - 在 Xcode 的 UILabel 上编写印地语

iphone - 是否可以使用 ABPersonViewController 或 ABUknownPersonViewController 来显示联系信息?

ios - 如何让UISlider在第一次显示的时候变粗?

objective-c - 沿二次曲线对 View 的中心点进行动画处理

ios - 是否可以将 `marshal` 数据放入 Realm 对象中?