Следующий код - это метод, который я создал внутри UIViewController для всплывающего / нисходящего наложения «читатель» поверх собственного представления контроллера.Цель состоит в том, чтобы читатель начинал с прозрачного нулевого размера в определенной точке.«Всплывающее окно» затем анимируется как увеличение непрозрачности и размера и смещается к центральной позиции фрейма приложения.«Всплывающее окно» впоследствии анимируется как обратное, сжимаясь назад, а затем перемещаясь к указанному месту, исчезая.
Всплывающий код работает точно так, как нужно.Однако всплывающая версия (т. Е. Код, выполняемый, если 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];
}
Я уже пробовал анимировать только кадр, а не границы и центр, но результат былидентичны.
Кто-нибудь знает, почему это происходит, и как я могу преодолеть эту проблему?
Большое спасибо за ваше время.