【问题标题】:Simultaneously showing and hiding with transitionWithView用transitionWithView同时显示和隐藏
【发布时间】:2012-07-31 20:00:14
【问题描述】:

我尝试了以下几种变体均无济于事。我想要的是显示一些东西的向下卷曲过渡,然后是相反的卷曲过渡。有透明度,所以效果是一个清晰的东西滚下一个视图。 这是在上卷和下卷时调用的函数:

-(void) setVisibility:(BOOL)isVisible animated:(BOOL)animated{    
    if (isVisible){
        self.topFold.hidden = YES;
    }
    [UIView transitionWithView:self 
                      duration:1.0f 
                       options:isVisible ? UIViewAnimationOptionTransitionCurlDown : UIViewAnimationOptionTransitionCurlUp
                    animations:^{
                        self.imageView.hidden = !isVisible;
                        self.background.hidden = !isVisible;
                        self.bottomCornerFold.hidden = !isVisible;
                    }
                    completion:^(BOOL finished){
                        if (!isVisible){
                            self.topFold.hidden = NO;
                        }
                    }
    ];
}

我已经尝试了十亿种不同的场景,但这个是最接近的。但问题是,当它使用isVisible = YES 运行时,topFold 一直可见,直到转换完成。也就是说,新的东西在它上面滚下来,好像有一个新东西在上面的视图的副本。完成后,它会用正确的版本替换整个内容。
为了澄清,我试图在任何动画开始之前隐藏topFold,但由于某种原因,它坚持在动画完成之前一直徘徊。会喜欢这里的指针。

【问题讨论】:

    标签: ios core-animation uiviewanimationtransition


    【解决方案1】:

    从笨拙但有效的部门,我嵌套了两个动画,一个在另一个的完成块中。看起来像这样并且有效:

     [UIView transitionWithView:self 
                              duration:0.0f 
                               options:nil
                            animations:^{
                                if (isVisible){
                                    self.topFold.hidden = YES;
                                }
                            }
                            completion:^(BOOL finished){
                                [UIView transitionWithView:self 
                                                  duration:1.0f 
                                                   options:isVisible ? UIViewAnimationOptionTransitionCurlDown : UIViewAnimationOptionTransitionCurlUp
                                                animations:^{
                                                    self.imageView.hidden = !isVisible;
                                                    self.background.hidden = !isVisible;
                                                    self.bottomCornerFold.hidden = !isVisible;
                                                }
                                                completion:^(BOOL finished){
                                                    if (!isVisible){
                                                        self.topFold.hidden = NO;
                                                    }
                                                }
                                 ];
                            }
             ];
    

    【讨论】:

      【解决方案2】:

      另一种方法是通过在短时间内启动 runloop 来给 topFold 视图隐藏时间。

      if (isVisible){
          self.topFold.hidden = YES;
          [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.0001]];
      }
      

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 2023-03-15
        • 2018-01-21
        • 2017-09-03
        • 2014-07-31
        相关资源
        最近更新 更多