以下代码是我在 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];
}
我已经尝试只为框架设置动画,而不是边界和中心,但结果是相同的。
有谁知道为什么会发生这种情况,以及如何克服这个问题?
非常感谢您的时间。