Existuje spôsob, ako vytvoriť vlastnú animáciu, keďkliknete na tlačidlo iPhone? Chcel by som niečo ako tlačidlo App Store - zobrazuje cenu, a keď na ňu kliknete, zmení farbu a zmení sa text, ktorý sa má kúpiť, a potom, keď naň znova kliknete, dokončí nákup.
UIViewAnimationTransition obsahuje iba niekoľko hodnôt, ktoré neposkytujú úplnú funkčnosť. Je možné urobiť niečo podobné, ale s animáciou:
- (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];
}
Tento kód funguje a zobrazí správny kódprechod a umožniť druhé kliknutie urobiť správnu akciu, ale názov a farba sa okamžite zmení, nie v plynulej animácii. Je možné takúto animáciu urobiť ľahko, musím vytvoriť podtriedu UIButton a animáciu vykonať „ručne“? Ak áno, akú metódu by som musel prepísať?
odpovede:
4 pre odpoveď č. 1Skôr než len zmeniť názov a cieľ,atď., majú dve samostatné tlačidlá, ktoré vykonávajú každú akciu a vyzerajú inak. Potom, keď stlačíte tlačidlo, zavolajte metódu, ktorá odstráni aktuálne tlačidlo z jeho super zobrazenia a pridá nové tlačidlo do zobrazenia na jeho miesto. Zabalte to do nejakého bloku animácie UIView a mali by ste si svoju animáciu získať.
Aby to fungovalo, musíte tiež nastaviťprechod animácie pri kontrole tlačidla. Mohlo by byť preto užitočné mať „zobrazenie kontajnera“ podľa toho, čo môže byť, a potom vám pridať ďalšie tlačidlá ako jeho podobrazy.
Pseudo kód môže vyzerať asi takto:
[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 pre odpoveď č. 2
Štandardné UIView urobí, čo chcete. UIView's backgroundColor je animovateľná vlastnosť.
Vytvoril by som vlastné „tlačidlo“ pomocou podtriedy UIView ALEBO prípadne podtriedy UIButton a pridával som do nich podskupiny. (poznámka: UIButtony boli v tomto bode bolesťou v 2.2, nie v 3.0)
Pre každý stav textu potrebujete UILabel:
UILabel *textForStateOne;
UILabel *textForStateTwo;
A môžete zmeniť farbu pozadia rodičovského zobrazenia.
Takže vo svojej novej triede tlačidiel urobíte metódu:
-(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 pre odpoveď č. 3
UIView *btnView4=button;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES];
[UIView commitAnimations];``