0
**解决......看到底部的说明**iPhone:UIControlEventTouchUpInside触发多次
有谁能够给我一个约凸显响应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];
}
...
}
的增变setHighlighted:(BOOL)newState_由UI框架(多次而draging拇指在控制)调用。 没有必要跟踪触摸事件来实现突出显示的状态。 简单的办法是重写突变和模仿新的状态...
-(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
好的,谢谢。终于找到了解决办法。 当用户触摸控件(启用用户交互)时,框架自动调用mutator/setter setHighlighted。无需跟踪触摸事件以显示突出显示的状态。如果属性的值发生变化,那么只需呈现该状态(在overriden setHighlighted方法中或使用KVO)。 我在我的问题文章中添加了正确的实现。 – MacTouch 2010-06-27 00:39:46