ios - 使用 transitionWithView 同时显示和隐藏

标签 ios core-animation uiviewanimationtransition

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

-(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 在转换完成之前保持可见。也就是说,新的东西在它上面滚下来,就好像有一个 View 的副本,新的东西在上面。然后一旦完成,它就会用正确的版本替换整个内容。
澄清一下,我试图在任何动画开始之前隐藏 topFold 但由于某种原因它坚持要等到动画完成。会喜欢这里的指针。

最佳答案

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

 [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;
                                                }
                                            }
                             ];
                        }
         ];

关于ios - 使用 transitionWithView 同时显示和隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11748031/

相关文章:

objective-c - UIImageView 动画从左到右

ios - CAReplicatorLayer 的下雪效果

iphone - 无法使用 CALayer for iphone 创建 ken burns 效果

ios - View Controller 之间的扩展圆圈动画过渡

android - 抽屉导航不显示在 react 导航中

ios - UIView 图像中的缩放效果

ios - 在 UITableView 中重用 UICollectionViewCell

ios - 如何在导航栏的 Controller 之间实现更好的过渡?

ios - 自定义 Viewcontroller 转换未正确调整大小

ios - Apple Mach-O 链接器警告。 lib/libxyz.a 在文件 lib/libxyz.a 中缺少所需的体系结构 i386