iPhone - Как анимировать кнопку при нажатии?

Есть ли способ сделать пользовательскую анимацию при нажатии на кнопку iPhone? Хотелось бы что-то вроде кнопки App Store - она ​​показывает цену, а потом при нажатии на нее она меняет цвет и текст меняется на купить сейчас, потом при повторном нажатии завершает покупку.

UIViewAnimationTransition содержит только несколько значений, которые не обеспечивают полной функциональности. Можно ли сделать что-то подобное, но с анимацией:

- (IBAction) changeButtonDisplay:(id)sender {

  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:0.8];
  [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:purchaseButton cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility

  [purchaseButton setTitle:@"Buy Now" forState:UIControlStateNormal];
  [purchaseButton setBackgroundColor:[UIColor greenColor]];
  [purchaseButton addTarget:self action:@selector(purchaseItems:) forControlEvents:UIControlEventTouchUpInside];

  [UIView commitAnimations];

}

Этот код работает и отображает правильный переход и позволяет второму щелчку выполнить правильное действие, но заголовок и цвет меняются мгновенно, а не плавной анимацией. Можно ли легко сделать такую ​​анимацию, нужно ли мне создавать подкласс UIButton и выполнять анимацию «вручную»? Если да, то какой метод мне придется переопределить?


person Tai Squared    schedule 22.06.2009    source источник


Ответы (3)


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

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

Псевдокод может выглядеть примерно так:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:buttonConteinerView cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility

[purchaseButton retain];
[purchaseButton removeFromSuperView];

[buttonContainerView addSubview:secondPurchaseButton];

[UIView commitAnimations];
person Jasarien    schedule 22.06.2009
comment
Кроме того, переход анимации по умолчанию — это затухание, поэтому вам может не понадобиться устанавливать переход анимации. - person Jasarien; 23.06.2009

Стандартный UIView будет делать то, что вы хотите. backgroundColor UIView является анимируемым свойством.

Я бы сделал собственную «кнопку», создав подкласс UIView ИЛИ, альтернативно, подкласс UIButton и добавив к нему подвиды. (примечание: UIButtons были проблемой в 2.2, не уверен в 3.0)

Вам нужен UILabel для каждого текстового состояния:

UILabel *textForStateOne;
UILabel *textForStateTwo;

И вы можете изменить цвет фона родительского представления.

Итак, вы создаете метод в своем новом классе кнопок:

 -(void)toggleState{

myState = !myState;

  if(myState){

      [UIView beginAnimations:nil context:NULL];
      [UIView setAnimationDuration:0.8];

      [textForStateOne setAlpha:1.0]
      [textForStateTwo setAlpha:0.0]

      [self setBackgroundColor:[UIColor greenColor]];

      [UIView commitAnimations];


  } else{

       //do the opposite here

  }




}
person Corey Floyd    schedule 23.06.2009

person    schedule
comment
пожалуйста, узнайте, как форматировать код (в верхней части поля ввода есть знак вопроса :-) - person kleopatra; 05.08.2013