我正在尝试设置UIView
(基于块的动画)的动画,但我无法使计时工作(持续时间等)。动画运行,因为更改已完成,并且显示了completition输出消息,但它只是忽略持续时间并立即进行更改。
我认为我做事的方式有问题,但我无法弄清楚错误在哪里。让我解释一下我要做的事情:
我有一个UIViewController
(viewcontroller)处理UIView
sublcass的两个对象(view1和view2),我在其中定义了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;
}
所以...我发布了这个简单的代码,就会发生错误。正如我所说,动画确实改变了alpha,但没有延迟或时间。这只是瞬间的。有这些附加信息的想法吗?
再次感谢您的帮助。
答案 0 :(得分:1)
我发现了问题。我想首先为所有人道歉,我是如何研究我的问题并且浪费了宝贵的时间。
我在原始问题中发布的所有第二部分都是复制和粘贴的,这是第一部分有两个不匹配的错误,因为它们来自更复杂的代码。你已经说过,那段代码没有问题。问题是我没有复制和粘贴我认为已从项目中删除的方法(并且在应用程序的开头调用):
- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation {
// ... More code
[UIView setAnimationsEnabled:NO];
// ... More code
return YES;
}
显然不需要进一步解释。
再次非常感谢您的时间,我真诚的道歉。