我有一个 UIViewController 和一个用于向 UIViewController 添加方法的类别。类中有一个方法:
@implementation UIViewController (AlertAnimationsAndModalViews)
-(void)someAddedMethod
{
UIView *someView;
//do some animation with the view that lasts 3 seconds
//remove the view and return
}
在任何视图控制器中我都可以调用这个方法
[self someAddedMethod];
但是,我只想允许这种方法一次运行一个。例如,如果我一个接一个地打两个电话
[self someAddedMethod];//call1
[self someAddedMethod];//call2
我希望第二个电话等到第一个电话完成。我知道 UIView animationWithduration... 在单独的线程中运行,并且看到我无法在类别中创建 iVars 我不能真正使用 @synchronized(someObject)..
有什么建议吗?
提前致谢!
编辑
该方法如下所示:
-(void)showTopBannerWithHeight:(CGFloat)height andWidth:(CGFloat)width andMessage:(NSString *)message andDuration:(CGFloat)duration
{
UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, -height, width, height)];
[self.view.superview addSubview:messageLabel];
[UIView animateWithDuration:0.5
delay:0
options: UIViewAnimationOptionBeginFromCurrentState
animations:^{
messageLabel.frame = CGRectMake(0, 0, SCREEN_WIDTH, height);
}
completion:^(BOOL finished){
[UIView animateWithDuration: 0.5
delay:duration
options: UIViewAnimationOptionBeginFromCurrentState
animations:^{
messageLabel.frame = CGRectMake(0, -height, SCREEN_WIDTH, height);
}
completion:^(BOOL finished){
[messageLabel removeFromSuperview];
}];
}];
}
所以我从屏幕顶部显示一个“横幅”,等待一段时间(CGFloat)然后将视图滑出屏幕并删除。由于这是一个类别,我无法添加实例变量。所以我想要实现的是,如果对该方法进行了多次调用,我希望第一次调用无需等待即可执行,但之后的每次调用等到上一个通话结束。