如何在对象动画时调用方法?

时间:2013-12-11 01:54:19

标签: ios objective-c cocoa-touch

我在TouchUpInside上的一个对象上调用一个方法。第一次点击对象时,其背景颜色将被设置为动画。如果我尝试在淡入淡出时再次快速点击该对象,则不会调用该方法。

这是我添加elementSelect操作的地方:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self addTarget:self action: @selector(elementSelect) forControlEvents: UIControlEventTouchUpInside];
        self.amount = 0;
    }
    return self;
}

这是elementSelect方法本身:

- (void)elementSelect {
    NSLog(@"Element Selected");
    if (![[AppDataObject sharedInstance].currentElementArray containsObject:self]) {
        [[AppDataObject sharedInstance].currentElementArray addObject:self];
        self.amount = 1;
    } else {
        self.amount += 1;
    }
    [[AppDataObject sharedInstance].viewController.mathView updateMath];
    [UIView animateWithDuration:0.2
                     animations:^{
                         self.backgroundColor = [UIColor colorWithRed:0.980 green:0.404 blue:0.373 alpha:1];
                     }];
}

当我运行它并不断点击该对象时,它将记录"元素选择"一次,然后它不会在0.2s动画期间记录任何内容,然后它会再次记录每次点击的消息。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

引用UIView animateWithDuration:animations:方法的文档:

  

在动画期间,暂时禁用用户交互   动画中涉及的所有视图,无论其中的值如何   属性。您可以通过指定禁用此行为   配置时的UIViewAnimationOptionAllowUserInteraction选项   动画。

您需要使用长格式animateWithDuration:delay:options:animations:completion:,并传入UIViewAnimationOptionAllowUserInteraction的选项值。

这应该使您的视图能够在动画时处理触摸事件。请注意,如果您执行移动视图的动画,则在动画时它将无法正常工作,因为视图的位置实际上会跳到动画开头的结束位置,然后视图的外观会移动到结束位置。其余的动画时长。