我尝试了以下几种变体无济于事。我想要的是一个向下弯曲的过渡,它显示了一些东西,然后是卷曲过渡,反过来相反。有透明度,因此效果是在视图上滚动的清晰效果。 这是在汇总和下滚时调用的函数:
-(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
,但出于某种原因,它坚持要在动画完成之前一直闲逛。会喜欢这里的指针。
答案 0 :(得分: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;
}
}
];
}
];
答案 1 :(得分:0)
另一种方法是通过在短时间内启动runloop来使topFold视图时间隐藏。
if (isVisible){
self.topFold.hidden = YES;
[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.0001]];
}