iOS / Objective-C: блок пользовательской анимации transitionWithView изменяет размер представления сразу, не дольше - PullRequest
0 голосов
/ 11 июля 2011

Следующий код - это метод, который я создал внутри 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];
}

Я уже пробовал анимировать только кадр, а не границы и центр, но результат былидентичны.

Кто-нибудь знает, почему это происходит, и как я могу преодолеть эту проблему?

Большое спасибо за ваше время.

1 Ответ

2 голосов
/ 11 июля 2011

из документов:

UIViewAnimationOptionTransitionNone - Возможность указать, что переход не должен происходить.

попробуйте один из:

UIViewAnimationOptionTransitionFlipFromLeft 
UIViewAnimationOptionTransitionFlipFromRight 
UIViewAnimationOptionTransitionCurlUp          
UIViewAnimationOptionTransitionCurlDown       

Редактировать : Или, если вы просто хотите анимировать эти значения, попробуйте

[UIView animateWithDuration:(NSTimeInterval)duration 
                 animations:(void (^)(void))animations 
                 completion:(void (^)(BOOL finished))completion];
...