我正在构建一个页面浏览器,可以将页面设置为“纸张”,并将其放在一堆纸上 . 为了保持流畅的动画,我使用了3个相互叠加的UIViews . 这三个视图包含当前页面(在顶部),上一页面(在中间)和下一页面(在底部) .
在下面的代码中,我想将顶视图向右拖动,显示下面的上一页 . 这很好用 . 但是,之后我需要将首页移动到堆栈的底部,以便在下次用户执行页面翻转时准备三个视图的堆栈 . 我使用sendSubviewToBack方法 .
我的问题是,一旦动画开始,ViewSample [Top]就会被发送到堆栈的底部 . 在将动画发送到堆栈底部之前,如何强制完成动画(以便ViewSample [Top]完全移出屏幕)?
ViewSample[Top].center = CGPointMake(x,y);
[UIView animateWithDuration:0.5
animations:^
{
ViewSample[Top].center = CGPointMake(x+w,y); //slide away to the right
}
completion:^(BOOL finished)
{
}
];
[self.MainView sendSubviewToBack:ViewSample[Top]];
编辑
我只是遇到了一个与我的问题有关的非常特殊的行为 . 我按照你的建议,发现动画的“完成”部分中的行为取决于变量'top'的值,当它设置为AFTERWARDS时:
ViewSample[Top].center = CGPointMake(x,y);
[UIView animateWithDuration:0.5
animations:^
{
ViewSample[Top].center = CGPointMake(x+w,y); //slide away to the right
}
completion:^(BOOL finished)
{ [self.MainView sendSubviewToBack:ViewSample[Top]];
}
];
Top++; // THIS COMMAND AFFECTS THE LINE ABOVE!!!
换句话说,当我添加“Top;”这一行时另一个View被移回堆栈,即使语句sendSubviewToBack是第一个 . 这对我来说非常困惑 . 这有意义吗?这是一个错误吗?