Czy wprowadzasz zmiany w bloku Core Animation?
Stworzyłem prostą aplikację iPhone opartą na widoku, aby przetestować to. Widok posiada dwa zaokrąglone obiekty rect UIButton:
Pierwszy przycisk jest w prawym górnym rogu (o szerokości 62 i wysokości 35) i wstępny tytuł „$ 0.99”. Jest podłączony do wyjścia "button" i "animacja" w kontrolerze widoku. To jest przycisk, który będzie animowany po dotknięciu.
Drugi przycisk znajduje się u dołu ekranu z tytułem "Resetuj" i jest połączony z działaniem "resetowania" w moim sterowniku widoku.
Oto kod widok kontroler:
UIButtonAnimationTestViewController.h:
#import <UIKit/UIKit.h>
@interface UIButtonAnimationTestViewController : UIViewController {
IBOutlet UIButton *button;
CGRect originalFrame;
}
- (IBAction)animate;
- (IBAction)reset;
@end
UIButtonAnimationTestViewController.m:
#import "UIButtonAnimationTestViewController.h"
@implementation UIButtonAnimationTestViewController
- (void)viewDidLoad {
[super viewDidLoad];
originalFrame = button.frame;
}
- (IBAction)animate {
CGRect frame = button.frame;
frame.origin.x -= 30;
frame.size.width += 30;
[UIView beginAnimations:@"button" context:nil];
button.frame = frame;
[button setTitle:@"" forState:UIControlStateNormal];
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[button setTitle:@"BUY NOW" forState:UIControlStateNormal];
}
- (IBAction)reset {
button.frame = originalFrame;
[button setTitle:@"$0.99" forState:UIControlStateNormal];
}
to nie tworzy odpowiedniego efektu dla mnie. Szerokość jest ustawiana jako pierwsza, a następnie przycisk przesuwa się do nowej pozycji. W AppStore prawo-X-pozycja prawego narożnika zawsze pozostaje na swoim miejscu, * jak * - skalowanie i tłumaczenie w tym samym czasie. – erazorx
Mój kod działa jak AppStore: prawa strona przycisku nie porusza się. Ponieważ wprowadzamy obie zmiany (translate left i increase width) do kopii ramki, a następnie zmieniając ramkę przycisku wewnątrz bloku animacji, obie zmiany muszą być animowane w tym samym czasie. – gerry3
To działa bezbłędnie, mój przyjacielu. – iwasrobbed