2009-11-18 3 views
1

Есть ли способ активировать включение или отключение кнопки? Я пробовал следующее без успеха. Я предполагаю в этот момент, что включенное свойство не может быть анимировано, как непрозрачность, но я надеюсь, что ошибаюсь.Анимировать включение UIBarButtonItem?

[UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.0f]; 
    theButton.enabled = YES; 
    [UIView setAnimationDelegate:self]; 
    [UIView commitAnimations]; 

Не могу поверить, что нет метода setEnabled:(BOOL)enabled animated:(BOOL)animated.

ответ

0

Анимационные свойства (через UIView beginAnimations: context :): frame, bounds, center, transform, alpha (из документов Apple).

Так вы, чтобы определить, что именно ваша анимация (с точки зрения цвета/альфа-анимации/преобразования) и создать анимацию вручную (возможно, вам придется использовать CAAnimation вместо UIView beginAnimations: контекст :)

+0

Ни одно из этих свойств не относится к UIBarButtonItem, которое не наследуется от UIView. –

+0

Вы правы. Но UIBarButtonItem может содержать customView, который является анимированным. – bealex

0

Вы можете отключить включение/выключение кнопки в изменении непрозрачности между двумя перекрывающимися изображениями каждый в одном или другом состоянии (т. Е. Сделать его похожим на fade-in/fade-out). В обработчике завершения анимации вы можете выполнить фактическое включение/выключение переключения.

0

Вот идея :)

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

+0

Я не вижу, какой метод я мог бы использовать для удаления UIBarButtonItem из представления. Кроме того, не приведет ли это к тому, что кнопка исчезнет как часть анимации? –

0

Набор: self.buttonSetEvent.customView.alpha = 0.2;

и попробовать этот

CGContextRef context = UIGraphicsGetCurrentContext(); 
[UIView beginAnimations:nil context:context]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView setAnimationDuration:0.15]; 
[UIView setAnimationRepeatCount:2]; 
[UIView setAnimationRepeatAutoreverses:YES]; 

self.buttonSetEvent.customView.alpha = 1; 

[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 
+0

Это работает только в том случае, если «self.buttonSetEvent» (и откуда взялось это имя переменной?) Было создано с пользовательским представлением. – taxilian

2

Это на самом деле очень легко. UIView.transitionWithView может делать снимок любого вида и перекрестно растворяться от моментального снимка до нового состояния представления. Вы можете использовать эту возможность для анимации большого количества изменений, включая enabled.

Просто используйте представление View Controller в качестве целевого вида, укажите TransitionCrossDissolve, а затем выполните анимацию, как обычно.

UIView.transitionWithView(self.view, 
    duration: 0.5, 
    options: UIViewAnimationOptions.TransitionCrossDissolve, 
    animations: {() -> Void in 
     self.someButton.enabled = !self.someButton.enabled 
}, completion:nil) 
+3

Если вы меняете один из элементов панели инструментов навигационного элемента, попробуйте передать 'navigationController.navigationBar' в качестве представления, а не' self.view'. –

 Смежные вопросы

  • Нет связанных вопросов^_^