iPhone - 如何动态显示按钮按下时?(iPhone - How to animate a b

2019-07-29 02:49发布

有没有办法在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子类,做动画“手动”? 如果是这样,我想有什么方法重写?

Answer 1:

而不是仅仅改变了按钮的标题和目标等,有两个单独的按钮,做每个动作和神态各异。 然后,当你按下按钮,调用其超视图中删除当前按钮,添加新的按钮,在其位置的视图的方法。 换行了一些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];


Answer 2:

A标准的UIView会做你想要什么。 UIView的的backgroundColor时的动画属性。

我会做自己的“按钮”通过继承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

  }




}


Answer 3:

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


文章来源: iPhone - How to animate a button when pressed?