Как переключить кнопку между выбранным и невыбранным состоянием в xcode?

У меня есть два изображения для кнопки: одно для нормального состояния и одно для выбранного состояния. Когда я переключаюсь из выбранного состояния обратно в нормальное состояние, я бы хотел, чтобы это произошло с эффектом плавного перехода в течение нескольких секунд.

То, что я делаю до сих пор, — это использование двух анимаций UIView: первая переходит от альфа-канала 1,0 к альфа-каналу 0,5 в выбранном состоянии. Затем я переключаюсь в нормальное состояние и выполняю вторую анимацию UIView, переходя от альфа-канала 0,5 к альфа-каналу 1,0.

Я не в восторге от визуального эффекта (резкий переход от выделенного к обычному изображению). Я также читал, что UIView больше не следует использовать. Так какой здесь правильный подход? Пример кода тоже был бы очень полезен.


person double07    schedule 10.03.2011    source источник


Ответы (3)


Для меня это сработало:

[UIView transitionWithView: button duration: 4.0 options: UIViewAnimationOptionTransitionCrossDissolve animations: ^{
    [button setSelected: !button.isSelected];
} completion: nil];

Но это только сработало, когда я установил те же UIImage на UIControlStateHighlighted и UIControlStateSelected с этими тремя последующими вызовами (у меня не сработало оставление одного вызова):

[button setImage: img forState: UIControlStateSelected | UIControlStateHighlighted];
[button setImage: img forState: UIControlStateSelected];
[button setImage: img forState: UIControlStateHighlighted];
person anneblue    schedule 14.10.2015

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

    button.selected = TRUE;
    CATransition *transition = [CATransition animation];
    transition.duration = 4.0;
    transition.type = kCATransitionFade;
    transition.delegate = self;
    [button.layer addAnimation:transition forKey:nil];
    button.selected = TRUE;
person double07    schedule 12.03.2011

Наконец-то я нашел то, что мне было нужно: вместо того, чтобы назначать изображения выбранному и невыбранному состояниям моей кнопки, я сохраняю свою кнопку прозрачной и вместо этого добавляю к этой кнопке два представления, первоначально с альфа-каналом 1,0 и 0,0.

Когда кнопка выбрана и я ввожу метод, указанный в селекторе, я использую анимацию для перехода между этими двумя представлениями следующим образом:

    NSArray * subviewArray = [button subviews];
    [UIView animateWithDuration:2.0
                    animations:^ {
                        ((UIView *)[subviewArray objectAtIndex:0]).alpha = 0.0;
                        ((UIView *)[subviewArray objectAtIndex:1]).alpha = 1.0;
                    }
                    completion:nil];

Этот подход также работает, если кнопка перемещается во время перехода. Я надеюсь, что это поможет другим, столкнувшимся с тем же вопросом в будущем!

person double07    schedule 14.03.2011