**解决了......见底部的解释**
任何人都可以给我一个关于突出显示控件以响应UIControlEventTouchUpInside的提示吗?
我想要实现的是触摸时类似于UITableViewCell的高亮效果。 在以下代码中,我在用户修改时更改突出显示视图的Alpha值 控制内部。不幸的是,事件被多次触发,当一个人将拇指放在显示器上并向上或向下移动时(据我所知它是一个UIControlEventTouchDragInside手势)。 它出什么问题了?我真的必须在动画期间删除事件目标吗?
-(id)initWithFrame:(CGRect)frame_
{
if (self = [super initWithFrame:frame_])
{
...
[self setMultipleTouchEnabled:NO];
[self addTarget:self action:@selector(touchUpInside) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
-(void)touchUpInside
{
[self setHighlighted:YES];
}
-(void)animationFinished
{
// Remove the highlight animated
[self setHighlighted:NO];
}
-(void)setHighlighted:(BOOL)highlighted_
{
BOOL oldValue = [self isHighlighted];
[super setHighlighted:highlighted_];
if (highlighted_ != oldValue)
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.35f];
if (highlighted_)
{
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationFinished)];
[[self highlightView] setAlpha:0.5f];
}
else
{
[[self highlightView] setAlpha:0.0f];
}
[UIView commitAnimations];
}
...
}
mutator setHighlighted:(BOOL)newState_由UI框架调用(多次在控件上拖动拇指)。 无需跟踪触摸事件即可实现突出显示的状态。 最简单的解决方案是覆盖mutator并模仿新状态......
-(void)setHighlighted:(BOOL)highlighted_
{
BOOL oldValue = [self isHighlighted];
if (highlighted_ != oldValue)
{
[super setHighlighted:highlighted_];
// NSLog(@"highlighted: %d", highlighted_);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.35f];
[[self highlightView] setAlpha:(highlighted_?0.5f:0.0f)];
[UIView commitAnimations];
}
}
也许,TouchUpInside事件会被触发一次......正如预期的那样。
谢谢, MacTouch
答案 0 :(得分:1)
是的,这是一个常见问题,可能是iPhone中的一个错误。
但解决方案很简单,您可以在视图控制器类中定义实例变量,并在调用函数时控制该变量。
像这样的东西
your_method {
if(control_var)
control_var=NO;
else {
//APPLICATION LOGIC
control_var=YES;
}
}