我有一个 UIButton 子类,它执行一些自定义绘图和动画。这一切都很好,花花公子。
但是,我的大多数按钮通过调用 [selfdismissViewControllerAnimated] 的超级视图来关闭当前视图,一旦模型确认按钮按下应该完成的任何事情都已实际完成,我希望有一个延迟以允许动画在关闭视图之前完成。
我能够轻松地在 touchesEnded 上为 UIButton 子类设置动画,然后调用 [super touchesEnded],它工作正常,只是它不会让我的动画在关闭视图之前完成。像这样:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CABasicAnimation *myAnimation = [CABasicAnimation animationWithKeyPath:@"transform.foo"];
//set up myAnimation's properties
[self.layer addAnimation:shakeAnimation forKey:nil];
[super touchesEnded:touches withEvent:event]; //works! but no delay
}
我第一次尝试创建延迟是使用 CATransaction,如下所示:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CABasicAnimation *myAnimation = [CABasicAnimation animationWithKeyPath:@"transform.foo"];
//set up myAnimation's properties
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[super touchesEnded:touches withEvent:event]; //doesn't seem to do anything :-/
}];
[self.layer addAnimation:shakeAnimation forKey:nil];
[CATransaction commit];
}
据我所知,它正在执行 CATransaction 的 completionBlock,但它什么也没做。
我还尝试将 touchesEnded 中的触摸和事件参数分配给属性和全局变量,然后在另一个由 NSTimer 调用的方法中执行 [super touchesEnded]。代码执行的地方似乎也发生了同样的事情,但是我对 [super touchesEnded] 的调用没有做任何事情。
我已经在网上挖了几个小时。添加了来自 UIResponder 的其他触摸方法的存根,其中仅包含 [super touches...]。尝试为 NSTimer 以不同方式调用的方法设置我的全局变量(我很可能遗漏了一些关于全局变量的东西......)。这个按钮是由故事板创建的,但我已经将类设置为我的自定义类,所以我不认为 UIButton 的 +(UIButton *)buttonWithType 方法会影响这一点。
我错过了什么?是否有一些小事情我忘记了,或者没有办法延迟从 UIButton 子类对 [super touchesEnded] 的调用?