Анимация UIView не работает должным образом в iOS 10

#objective-c #xcode #animation #uiview #ios10

#objective-c #xcode #Анимация #uiview #ios10

Вопрос:

GIF показывает проблему. В приведенном ниже коде показано, как я добавляю view в superview и выводю его снизу superview. Этот код отлично работает в iOS 9, а не в iOS 10.

Анимация анимации сдвига вверх неправильная. Он выходит с правой стороны и делает угол вместо прямого снизу.

Пожалуйста, помогите мне решить эту проблему.

   (ControlsView *)addArticleControlsToView:(UIView *)view bellowSubview:(UIView *)subview{
    ControlsView *articleControls = [[[NSBundle mainBundle] loadNibNamed:@"ControlsView" owner:self options:nil]firstObject];
    [view insertSubview:articleControls belowSubview:subview];
    NSDictionary *viewsDict = @{@"currentView":articleControls};
    [articleControls setTranslatesAutoresizingMaskIntoConstraints:NO];
    NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-0-[currentView]-0-|"] options:0 metrics:@{} views:viewsDict];
    NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[currentView(189)]-0-|" options:0 metrics:@{} views:viewsDict];
    [view addConstraints:horizontalConstraints];
    [view addConstraints:verticalConstraints];
    [articleControls setBackgroundColor:[UIColor clearColor]];
    articleControls.viewBottomConstraint.constant = -189;
    [articleControls layoutIfNeeded];
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:articleControls action:@selector(slideSheetDown)];
    [articleControls addGestureRecognizer:tapGesture];
    return articleControls;
}

- (void)slideSheetUp {
    [UIView animateWithDuration:0.5 animations:^{
        self.viewBottomConstraint.constant = 0;
        self.scrollViewBottomConstraint.constant = 189;
        [self setBackgroundColor:[UIColor clearColor]];
        [self.scrollView.superview layoutIfNeeded];
        [self layoutIfNeeded];
    }];
}
 

введите описание изображения здесь

Комментарии:

1. Не обновляйте константу ограничения в блоке анимации.

2. @Desdenova удален и его рабочая находка, но как анимировать его сейчас в iOS 10?

3. Держите layoutIfNeeded бит в блоке. Только не устанавливайте в нем константы.

4. @Desdenova Не работает

Ответ №1:

Просто используйте этот код

 - (void)slideSheetUp {
    self.viewBottomConstraint.constant = 0;
    self.scrollViewBottomConstraint.constant = 189;
    [self setBackgroundColor:[UIColor clearColor]];
    [UIView animateWithDuration:0.5 animations:^{
        [self.scrollView.superview layoutIfNeeded];
        [self layoutIfNeeded];
    }];
}
 

Надеюсь, это сработает для вас. 😉

Счастливого кодирования!!

Комментарии:

1. что произойдет, тот же результат, что и в предыдущем, или какие-либо изменения?

2. Правильно, тот же результат, что и предыдущий.

3. Ваша позиция scrollViewBottomConstraint (X) должна быть такой же, как у redview при инициализации, перед применением анимации.

Ответ №2:

Работает для меня.

 -(void)hideShowTimerButton:(BOOL)show{

 [UIView animateWithDuration:0.3 animations:^{
    CGRect yourViewFrame =  yourView.frame;
    if(show){
        timeContainerViewFrame.origin.y = self.view.frame.size.height;
    }else{
        timeContainerViewFrame.origin.y = self.view.frame.size.height - yourViewFrame.size.height;
    }
    yourView.frame = yourViewFrame;
} completion:^(BOOL finished) {
}];

}
 

Ответ №3:

Пожалуйста, перестройте свой код, как показано ниже, это не слишком сильно повлияло на мою анимацию просмотра и решило мою проблему. Спасибо вам, ребята.

 - (void)slideSheetUp {
    self.viewBottomConstraint.constant = 0;
    [self setBackgroundColor:[UIColor clearColor]];
    [UIView animateWithDuration:0.5 animations:^{
        [self layoutIfNeeded];
    } completion:^(BOOL finished) {
        self.scrollViewBottomConstraint.constant = 189;
        [self.scrollView.superview layoutIfNeeded];
    }];
}