iPhone - Как оживить кнопку при нажатии? - PullRequest
3 голосов
/ 23 июня 2009

Есть ли способ сделать собственную анимацию при нажатии на кнопку 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 и делать анимацию «вручную»? Если да, то какой метод мне нужно переопределить?

Ответы [ 3 ]

4 голосов
/ 23 июня 2009

Вместо того, чтобы просто изменить заголовок, цель и т. Д. Кнопки, есть две отдельные кнопки, которые выполняют каждое действие и выглядят по-разному. Затем, когда вы нажимаете кнопку, вызываете метод, который удаляет текущую кнопку из ее суперпредставления и добавляет новую кнопку в представление на его месте. Оберните это в некоторый анимационный блок 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];
3 голосов
/ 23 июня 2009

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

Я бы создал собственную "кнопку", создав подкласс UIView ИЛИ альтернативно разделив подкласс UIButton и добавив к нему подвид (примечание: UIB-кнопки были проблемой в 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

  }




}
0 голосов
/ 05 августа 2013
UIView *btnView4=button;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES];
[UIView commitAnimations];``
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...