Анимация кадра UIView, подпредставление UIScrollView не всегда анимируется

В этом примере

я анимирую фрейм PhotoViewerViewController, когда я анимирую tabBarController (для полноэкранного эффекта). PhotoViewer использует uiscrollview для создания того же эффекта, что и приложение Apple для фотографий. По какой-то причине иногда он анимируется вместе с моим кадром PhotoViewer, а иногда - нет.

В первом примере вы можете видеть, что он прыгает при увеличении размера кадра, но хорошо анимируется при уменьшении размера кадра (и восстановлении вкладки bar).

Однако в этом примере, когда фотография вертикальная, она прыгает в обоих направлениях.

В обоих случаях, если я увеличиваю фотографию вообще с помощью прокрутки, она правильно анимируется в в обоих направлениях.

Я знаю, что доказательства есть, но я не могу понять, что здесь происходит.

Вот мой блок анимации:

void (^updateProperties) (void) = ^ {
    self.navigationController.navigationBar.alpha = hidden ? 0.0f : 1.0f;
    self.navigationController.toolbar.alpha = hidden ? 0.0f : 1.0f;
    if (self.tabBarController) {

        int height = self.tabBarController.tabBar.bounds.size.height;
        for(UIView *view in self.tabBarController.view.subviews)
        {
            int newHeight;
            UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
            if (UIInterfaceOrientationIsPortrait(orientation)) {
                newHeight = hidden ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.height - height;
            } else {
                newHeight = hidden ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.width - height;
            }


            if([view isKindOfClass:[UITabBar class]])
            {
                [view setFrame:CGRectMake(view.frame.origin.x, newHeight, view.frame.size.width, view.frame.size.height)];
            } 
            else 
            {
                CGRect newFrame = CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, newHeight);
                [view setFrame:newFrame];

                // update our VC frame with animation
                [self.view setFrame:newFrame];

            }

        }
    }

};

Код адаптирован из сообщения на SO: UITabBar не скрыть

Полный исходный код на github .

6
задан Community 23 May 2017 в 11:53
поделиться