有没有办法在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子类,做动画“手动”? 如果是这样,我想有什么方法重写?
而不是仅仅改变了按钮的标题和目标等,有两个单独的按钮,做每个动作和神态各异。 然后,当你按下按钮,调用其超视图中删除当前按钮,添加新的按钮,在其位置的视图的方法。 换行了一些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];
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
}
}
UIView *btnView4=button;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES];
[UIView commitAnimations];``