0

以下代码是我在 UIViewController 中创建的一种方法,用于在控制器自己的视图顶部弹出/向下弹出“阅读器”覆盖。目的是让读者在特定点从透明、大小为零开始。然后“弹出”动画随着不透明度和大小的增加而增加,并移向应用程序框架的中心位置。“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];
}

我已经尝试只为框架设置动画,而不是边界和中心,但结果是相同的。

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

非常感谢您的时间。

4

1 回答 1

2

来自文档:

UIViewAnimationOptionTransitionNone - 用于指定不应发生过渡的选项。

尝试以下之一:

UIViewAnimationOptionTransitionFlipFromLeft 
UIViewAnimationOptionTransitionFlipFromRight 
UIViewAnimationOptionTransitionCurlUp          
UIViewAnimationOptionTransitionCurlDown       

编辑:或者如果您只是想为这些值设置动画,请尝试

[UIView animateWithDuration:(NSTimeInterval)duration 
                 animations:(void (^)(void))animations 
                 completion:(void (^)(BOOL finished))completion];
于 2011-07-11T19:57:47.123 回答