Как залить кнопку между выбранным и невыбранным состоянием в xcode? - PullRequest
4 голосов
/ 10 марта 2011

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

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

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

Ответы [ 3 ]

1 голос
/ 14 марта 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];

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

1 голос
/ 14 октября 2015

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

[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];
1 голос
/ 12 марта 2011

Следующее довольно просто и перейдет из выбранного в невыбранное состояние через 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;
...