下面的代码是我在UIViewController中创建的一个方法,用于弹出/关闭一个覆盖在控制器自己视图顶部的"reader"。这样做的目的是让读者在一个特定的点上以透明的、大小为零的方式开始。然后,"弹出"的不透明度和大小增加,并移动到应用程序框架的中心位置。"Popdown"随后以相反的方式动画,在向指定位置移动时收缩,淡出。
弹出代码完全按预期工作。然而,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];
}
我已经尝试过只动画帧,而不是边界和中心,但结果是相同的。
有谁知道为什么会发生这种情况,我该如何克服这个问题?
感谢您的宝贵时间。
from the docs:
UIViewAnimationOptionTransitionNone -指定不发生转换的选项。
try one of:
UIViewAnimationOptionTransitionFlipFromLeft
UIViewAnimationOptionTransitionFlipFromRight
UIViewAnimationOptionTransitionCurlUp
UIViewAnimationOptionTransitionCurlDown
编辑:或者如果你只是想让这些值动画化,试试
[UIView animateWithDuration:(NSTimeInterval)duration
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion];