Я много искал здесь, но, похоже, не нашел ответа на свой вопрос ...
У меня есть класс под названием SubView, у этого класса есть простая возможность, он может отображаться или исчезать анимированными
Он делает это так:
-(void)showAnimated:(BOOL)animated {
self.active = YES;
//Make topmost
[self.parentView bringSubviewToFront:self];
if (animated) {
[UIView animateWithDuration:0.5
delay:0.0f
options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.frame = self.originalFrame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
completion:^(BOOL finished){
}];
}
else {
self.frame = self.originalFrame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
Если self.originalFrame сохранил исходное значение позиции представления, скрытая часть, если она действительно похожа
-(void)hideAnimated:(BOOL)animated {
self.active = NO;
//Store the frame
CGRect _frame = self.frame;
//Set the view starting point
switch (self.showingLocation) {
case SubViewShowingLocationRight:
_frame.origin = CGPointMake(_frame.size.width, _frame.origin.y);
break;
case SubViewShowingLocationBottom:
_frame.origin = CGPointMake(_frame.origin.x, _frame.size.height);
break;
case SubViewShowingLocationLeft:
_frame.origin = CGPointMake(-_frame.size.width, _frame.origin.y);
break;
default:
break;
}
if (animated) {
[UIView animateWithDuration:0.5
delay:0.0f
options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.frame = _frame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
completion:^(BOOL finished){
}];
}
else {
self.frame = _frame;
if (self.panningBlock) {
self.panningBlock(self.frame);
}
}
[self.delegate didDismissSubView:self];
}
//// Итак, анимация происходит в self.frame = _frame и self.frame = self.originalFrame
Также у меня есть self.panningBlock, то есть блок, который может предоставить родительский вид (он работает, так что он может настраиваться на изменение кадра в subview .. т.е. у sub view есть средство выбора, и оно появляется снизу, мне нужно отрегулируйте вид таблицы, чтобы он не был закрыт сборщиком)
Пример того, что я делаю:
__weak MapViewController * weakSelf = self;
[weakSelf.placesView setPanningBlock:^(CGRect _frame){
if (weakSelf.placesView.isActive) {
CGRect mapFrame = weakSelf.mapView.frame;
mapFrame.origin.x = _frame.origin.x + _frame.size.width;
weakSelf.mapView.frame = mapFrame;
}
else {
CGRect mapFrame = weakSelf.mapView.frame;
mapFrame.origin.x = 0;
weakSelf.mapView.frame = mapFrame;
}
}];
Здесь родительский вид перемещается вправо, если подвид, кажется, дает толчок как анимацию.
Это весь код, необходимый для понимания (это мой первый вопрос, так что простите за бессвязный разговор)
Дело в том, что анимации не будут происходить одновременно, происходит то, что входящее представление входит немного медленнее, чем родительское представление, которое они не держат вместе, и я действительно не знаю, что делать ...
Кстати: они слипаются в первый раз, когда появляется анимация, но не более того ...
Какие-либо предложения?
ИЗМЕНИТЬ Теперь я даю несколько изображений, чтобы объяснить, что происходит
1 ответ
Я сказал это, поскольку на самом деле ответа не было ...
Проблема заключалась в .. общем размере просмотров ...
Размер MAPVIEW 100%, в то время как размер таблицы 80% ... я помещал их в одну и ту же анимацию ... поэтому они будут двигаться по-разному, потому что они должны покрывать 1,0 секунду или около того анимации для всего движения ...
Эта проблема решается с помощью ЯВНОЙ АНИМАЦИИ ... есть несколько библиотек ... я использовал одну, которая уничтожила мой проект ... так что я закончил тем, что бросил ее ... и взял еще ... патч. .. установка цвета фона так, чтобы он маскировал движение ...
Решение этой проблемы - использовать явную анимацию и для каждого кадра ... перемещать оба представления в одну и ту же точку ...
Надеюсь, что это «решение» поможет сообществу ..
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.