Я пытаюсь анимировать UIView
(блочная анимация), но не могу заставить работать время (продолжительность и т. Д.). Анимация запускается, потому что изменения сделаны, и выводится сообщение о завершении, но оно просто игнорирует продолжительность и мгновенно вносит изменения.
Я полагаю, что с тем, как я что-то делаю, что-то не так, но я просто не могу понять, в чем ошибка. Позвольте мне объяснить, что я пытаюсь сделать:
У меня есть UIViewController
(viewcontroller), который обрабатывает два объекта (view1 и view2) из подкласса UIView
, в котором я определил метод touchesEnded
.
Идея состоит в том, что, когда view1 был затронут, я хочу анимировать view2. Поэтому я реализовал метод анимации в подклассе UIView
, уведомление в методе touchesEnded
(также в подклассе UIView
) и
метод триггера в контроллере, который вызывает анимацию второго представления. Примерно так:
// In the UIView subclass:
- (void) myAnimation{
[UIView animateWithDuration:2.0
delay:0.0
options: UIViewAnimationCurveEaseOut
animations:^{
self.alpha = 0.5;
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];
}
// In the UIView subclass:
- (void) touchesEnded: (NSSet*) touches withEvent: (UIEvent*) event {
[pParent viewHasBeenTouched]; // pParent is a reference to the controller
}
// In the UIViewController:
- (void) viewHasBeenTouched {
[view2 myAnimation];
}
(анимация и рабочий процесс на самом деле немного сложнее, но этот простой пример просто не работает)
Если я размещу анимацию где-то еще, она может работать, например, сразу после инициализации представлений в методе init контроллера. Но если я попытаюсь сделать это вызовы вперед-назад, анимация просто проигнорирует продолжительность и выполнится за один шаг.
Есть идеи? Что я упустил из-за прикосновений и жестов, которые я должен знать? Спасибо.
НОВАЯ ИНФОРМАЦИЯ, ДОБАВЛЕННАЯ К ОРИГИНАЛЬНОМУ ПОЧТУ:
AppDelegate ничего не делает, кроме этого:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[TestViewController alloc] init];
self.window.rootViewController = self.viewController;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
TestViewControler.h это просто:
#import <UIKit/UIKit.h>
#import "TestView.h"
@interface TestViewController : UIViewController{
TestView* myView;
}
- (void) viewHasBeenTouched;
@end
и viewDidLoad делает только это:
- (void)viewDidLoad{
[super viewDidLoad];
myView = [[TestView alloc] initWithParent:self];
[self.view addSubview:myView];
}
Наконец, в UIView есть TestView.h, который выглядит следующим образом:
#import <UIKit/UIKit.h>
@class TestViewController; // Forward declaration
@interface TestView : UIView{
TestViewController* pParent;
}
- (id)initWithParent:(TestViewController*) parent;
- (void) myAnimation;
@end
И используемый метод init:
- (id)initWithParent:(TestViewController *)parent{
CGRect frame = CGRectMake(50, 20, 100, 200);
self = [super initWithFrame:frame];
if (self) pParent = parent;
self.backgroundColor = [UIColor blueColor];
return self;
}
Итак ... с этим простым кодом, который я разместил, возникает ошибка. Как я уже сказал, анимация меняет альфу, но без задержки и синхронизации. Это просто мгновенно. Любые идеи с этой добавленной информацией?
Еще раз спасибо за помощь.