Пользовательский переход не анимируется

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

Вот переход на раскадровке: Вот переход на раскадровке

Вот кнопка: Вот кнопка

Вот код перехода:

#import "TimerDialogSegue.h"

@implementation TimerDialogSegue

-(void)perform
{
    UIViewController *dst = [self destinationViewController];
    //Doesn't appear work with the Timer View Controller as the source 
    //  so I use the parent Home View Controller
    UIViewController *src = [self sourceViewController];
    src = src.parentViewController;

    // set the view frame
    CGRect frame;
    frame.size.height = src.view.frame.size.height;
    frame.size.width = src.view.frame.size.width;
    frame.origin.x = src.view.bounds.origin.x;
    frame.origin.y = src.view.bounds.origin.y;
    dst.view.frame = frame;

    // add the view to the hierarchy and bring to front
    [src addChildViewController:dst];
    [src.view addSubview:dst.view];
    [src.view bringSubviewToFront:dst.view];

    [UIView animateWithDuration:0.3f
        animations:^
        {
            dst.view.alpha = 1.0f;
        }];
}

@end

Вот код из диалогового окна, который его закрывает, эта часть анимируется просто отлично

- (IBAction)cancelButtonPressed:(id)sender
{
    [self dismiss:sender];
}

- (IBAction)dismiss:(id)sender
{
    [UIView animateWithDuration:0.3f
        animations:^
        {
            self.view.alpha = 0.0f;
        }
        completion:^(BOOL finished)
        {
            [self.view removeFromSuperview];
            [self removeFromParentViewController];
        }];
}

Подводя итог, диалоговое окно отображается и работает правильно, единственная проблема заключается в отсутствии анимации при его появлении. Он оживает, когда исчезает. Кто-нибудь знает, как я могу исправить это или обходной путь для анимации этого диалогового окна, когда оно появляется?

Заранее благодарю за любую помощь.


person Dave S    schedule 11.11.2014    source источник
comment
Кстати, я хотел бы спросить, что вы здесь делаете. Что пытаетесь сделать вы? Это похоже на неправильное использование встроенного/дочернего контроллера представления. На мой взгляд, это больше похоже на обычный представленный контроллер представления или даже просто на представление, которое появляется. Вы могли бы сделать свою жизнь намного проще и лучше контролировать анимацию. Если вы опишете общий эффект, которого пытаетесь достичь, я смогу показать вам лучший способ...!   -  person matt    schedule 11.11.2014
comment
Представление таймера переключается кнопкой «Часы» вверху, поэтому я использую контейнер, чтобы изолировать изменения макета в одном кадре и отделить функции таймера от остального кода.   -  person Dave S    schedule 11.11.2014
comment
Круто (имеет смысл для инкапсуляции), но тогда почему это не может быть представленный контроллер представления, а не встроенный контроллер представления?   -  person matt    schedule 11.11.2014
comment
Причина, по которой я настаиваю на этом, заключается в том, что настройка анимации представленного контроллера представления проста и нормальна, в то время как необходимость анимировать начальное встраивание вынуждает вас идти по этой пользовательской дороге перехода, которая кажется ненужной.   -  person matt    schedule 11.11.2014
comment
ну, мы хотим, чтобы он соответствовал нашему приложению для Android и дизайну макета, который придумали наши дизайнеры. Насколько я знаю, представленные контроллеры представлений - это их собственные окна, верно? Совершенно новый контроллер представления был бы пустым, если бы это были только таймеры, и мы хотим, чтобы пользователи сразу видели свои таймеры и температуру гриля.   -  person Dave S    schedule 11.11.2014
comment
Я все еще относительно новичок в iOS, поэтому я весь внимание, если есть лучший способ, который соответствует макету.   -  person Dave S    schedule 11.11.2014
comment
Нет, в iOS 7/8 представленный контроллер представления может находиться только над частью интерфейса. Однако, если вы хотите, чтобы пользователь мог взаимодействовать с остальной частью интерфейса, пока присутствует таймер, вы, вероятно, поступаете правильно.   -  person matt    schedule 11.11.2014


Ответы (1)


Ты говоришь:

[UIView animateWithDuration:0.3f
    animations:^
    {
        dst.view.alpha = 1.0f;
    }];

Но dst.view.alpha это 1 уже, так что ничего не происходит. Вы можете только анимировать изменение.

Например, когда вы отклоняете, вы анимируете это:

  self.view.alpha = 0.0f;

Это работает, потому что self.view.alpha было 1, поэтому на самом деле есть изменение для анимации.

person matt    schedule 11.11.2014
comment
поэтому, если я установлю dst.view.alpha на 0.0f, прежде чем я позвоню, это должно работать? - person Dave S; 11.11.2014
comment
Попробуйте и убедитесь — не нужно строить догадки о том, что должно работать. Я ничего не гарантирую! :) Я просто говорю вам, что в вашем коде есть очевидная ошибка, которая может быть причиной этого явления. - person matt; 11.11.2014
comment
Круто - спасибо за согласие - но давайте продолжим болтать об этой архитектуре (если хотите). - person matt; 11.11.2014