我在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动画期间记录任何内容,然后它会再次记录每次点击的消息。
非常感谢任何帮助!
答案 0 :(得分:2)
引用UIView animateWithDuration:animations:
方法的文档:
在动画期间,暂时禁用用户交互 动画中涉及的所有视图,无论其中的值如何 属性。您可以通过指定禁用此行为 配置时的UIViewAnimationOptionAllowUserInteraction选项 动画。
您需要使用长格式animateWithDuration:delay:options:animations:completion:,并传入UIViewAnimationOptionAllowUserInteraction的选项值。
这应该使您的视图能够在动画时处理触摸事件。请注意,如果您执行移动视图的动画,则在动画时它将无法正常工作,因为视图的位置实际上会跳到动画开头的结束位置,然后视图的外观会移动到结束位置。其余的动画时长。