点击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子类并“手动”动画?如果是这样,我必须覆盖哪种方法?
答案 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];``