#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];
}];
}