iPhone - 如何在按下时为按钮设置动画?

时间:2009-06-22 22:54:08

标签: iphone animation button

点击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 个答案:

答案 0 :(得分:4)

不仅仅是更改按钮的标题和目标等,还有两个单独的按钮,可以执行每个操作并且看起来不同。然后,当您按下按钮时,调用一个方法,从超级视图中删除当前按钮,并将新按钮添加到视图中。在一些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];

答案 1 :(得分:3)

标准UIView将做你想要的。 UIView的backgroundColor是一个可动画的属性。

我会通过子类化UIView来创建自己的“按钮”或者替代UIButton的子类并向其添加子视图。 (注意:UIButton在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

  }




}

答案 2 :(得分:0)

UIView *btnView4=button;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES];
[UIView commitAnimations];``