Я много искал здесь, но, похоже, не нашел ответа на свой вопрос ...

У меня есть класс под названием 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;
    }
}];

Здесь родительский вид перемещается вправо, если подвид, кажется, дает толчок как анимацию.

Это весь код, необходимый для понимания (это мой первый вопрос, так что простите за бессвязный разговор)

Дело в том, что анимации не будут происходить одновременно, происходит то, что входящее представление входит немного медленнее, чем родительское представление, которое они не держат вместе, и я действительно не знаю, что делать ...

Кстати: они слипаются в первый раз, когда появляется анимация, но не более того ...

Какие-либо предложения?

ИЗМЕНИТЬ Теперь я даю несколько изображений, чтобы объяснить, что происходит

screenshot 1 screenshot 2

0
Heavy_Bullets 10 Фев 2013 в 20:45
Простите еще часть метода скрытия ... он отправляет self.frame вместо self.contentView.frame ... на самом деле это не влияет, потому что я всегда отправляю анимированные (я изменю это сейчас)
 – 
Heavy_Bullets
10 Фев 2013 в 20:54
Трудно понять, каковы все ваши взгляды. Можете ли вы описать, какие у вас есть взгляды и как вы хотите, чтобы они двигались? Вы упоминаете класс SubView, средство выбора и таблицу - неясно, как они работают вместе (или все ли они содержатся в одном суперпредставлении).
 – 
rdelmar
10 Фев 2013 в 20:57
Хорошо, конечно ... здесь класс subview - это только представление, которое имеет возможность скрывать или отображать появление сбоку, метод show и hide делает это, заставляет исходную точку перемещаться влево, вправо или вниз, чтобы исчезнуть, или восстановить его исходный фрейм, чтобы появиться, после этого блок self.panning является необязательным блоком, который вызывает subview, так что родитель этого представления может настраиваться на появление или исчезновение представления (т.е. представление появляется слева и i хотите, чтобы родительское представление переместилось вправо, чтобы освободить для него место (например, push) ... представление содержимого имеет содержимое подпредставления, спасибо!
 – 
Heavy_Bullets
11 Фев 2013 в 00:05
Блок панорамирования ... что делает вызывающий, когда subview скрывает или показывает (настраивает и т. д.) ... contentView имеет фактическое содержимое (табличное представление и т. д.), в то время как нормальный вид ясен ... (это было из-за устаревшего метода, который мне пришлось поддерживать) ^^ ... и я почти забыл ... в последней строке кода ... MapViewController => - это контроллер, который имеет представление, содержащее подпредставление ... и слабый
 – 
Heavy_Bullets
11 Фев 2013 в 00:09
Я не вижу ничего, что могло бы заставить это работать в первый раз, а не после этого. Я думаю, мне нужно было бы увидеть весь код, чтобы сделать какие-либо предложения относительно того, что делать - мне слишком сложно обернуть голову, не увидев его в действии.
 – 
rdelmar
11 Фев 2013 в 02:08

1 ответ

Лучший ответ

Я сказал это, поскольку на самом деле ответа не было ...

Проблема заключалась в .. общем размере просмотров ...

Размер MAPVIEW 100%, в то время как размер таблицы 80% ... я помещал их в одну и ту же анимацию ... поэтому они будут двигаться по-разному, потому что они должны покрывать 1,0 секунду или около того анимации для всего движения ...

Эта проблема решается с помощью ЯВНОЙ АНИМАЦИИ ... есть несколько библиотек ... я использовал одну, которая уничтожила мой проект ... так что я закончил тем, что бросил ее ... и взял еще ... патч. .. установка цвета фона так, чтобы он маскировал движение ...

Решение этой проблемы - использовать явную анимацию и для каждого кадра ... перемещать оба представления в одну и ту же точку ...

Надеюсь, что это «решение» поможет сообществу ..

1
Heavy_Bullets 21 Мар 2013 в 05:00