** решено ... см. Пояснение внизу **
Может кто-нибудь дать мне подсказку о выделении элемента управления в ответ на UIControlEventTouchUpInside?
Что я хочу достичь, так это подсветкаэффект, аналогичный UITableViewCell, при касании.В следующем коде я изменяю альфа-значение представления подсветки, когда пользователь подправляет внутри элемента управления.К сожалению, событие вызывается несколько раз, когда вы удерживаете большой палец на дисплее и перемещаете его вверх или вниз (в моем понимании это жест 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_ вызывается платформой пользовательского интерфейса (несколько раз при перетаскивании большого пальца на элемент управления),Нет необходимости отслеживать сенсорные события для реализации выделенного состояния.Самое простое решение - переопределить мутатор и имитировать новое состояние ...
-(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