iOS/Objective-C: transitionWithView自定义动画块立即调整视图大小,而不是持续时间



下面的代码是我在UIViewController中创建的一个方法,用于弹出/关闭一个覆盖在控制器自己视图顶部的"reader"。这样做的目的是让读者在一个特定的点上以透明的、大小为零的方式开始。然后,"弹出"的不透明度和大小增加,并移动到应用程序框架的中心位置。"Popdown"随后以相反的方式动画,在向指定位置移动时收缩,淡出。

弹出代码完全按预期工作。然而,popdown版本(即如果isPopup == NO执行的代码)立即改变边界,而不是逐渐这样做。因此,弹出动画从一开始就显示一个1像素的正方形视图向其目的地移动并逐渐淡出。

-(void)popupReader:(BOOL)isPopup from:(CGPoint)loc  {
    CGFloat newAlpha = 0.0f;
    CGPoint newCenter = CGPointZero;
    CGRect newBounds = CGRectZero;
    CGRect appFrame = [UIScreen mainScreen].applicationFrame;
    CGSize readerSize = [self viewSize];
    if (isPopup) {
        newAlpha = 1.0f;
        newCenter = CGPointMake(appFrame.origin.x+appFrame.size.width/2,
                                appFrame.origin.y+appFrame.size.height/2);
        newBounds = CGRectMake(0,0,readerSize.width,readerSize.height);
        [self.view setAlpha:0.0f];
        [self.view setCenter:loc];
        [self.view setBounds:CGRectMake(0, 0, 0, 0)];
    } else {
        newCenter = loc;
        newBounds = CGRectMake(0,0,1,1);
    }
    const CGFloat animDur = 0.3f;    
    [UIView transitionWithView:self.view 
                      duration:animDur
                       options:UIViewAnimationOptionTransitionNone|UIViewAnimationOptionCurveEaseOut 
                    animations:^{
      self.view.alpha = newAlpha; 
      self.view.center = newCenter; 
      self.view.bounds = newBounds;
      } 
         completion:nil];
}

我已经尝试过只动画帧,而不是边界和中心,但结果是相同的。

有谁知道为什么会发生这种情况,我该如何克服这个问题?

感谢您的宝贵时间。

from the docs:

UIViewAnimationOptionTransitionNone -指定不发生转换的选项。

try one of:

UIViewAnimationOptionTransitionFlipFromLeft 
UIViewAnimationOptionTransitionFlipFromRight 
UIViewAnimationOptionTransitionCurlUp          
UIViewAnimationOptionTransitionCurlDown       

编辑:或者如果你只是想让这些值动画化,试试

[UIView animateWithDuration:(NSTimeInterval)duration 
                 animations:(void (^)(void))animations 
                 completion:(void (^)(BOOL finished))completion];

最新更新