Iphone 触摸TableViewCell时需要闪烁
我有一个TableViewCell,我想在点击它时闪烁(即快速亮显关闭和打开几次) 到目前为止,我已使用计时器实现了此功能,如下所示:Iphone 触摸TableViewCell时需要闪烁,iphone,ios,cocoa-touch,Iphone,Ios,Cocoa Touch,我有一个TableViewCell,我想在点击它时闪烁(即快速亮显关闭和打开几次) 到目前为止,我已使用计时器实现了此功能,如下所示: -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSTimer *blinkTimer = [[NSTimer scheduledTimerWithTimeInterval:.05 target:self selector:@selector(toggleHighl
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSTimer *blinkTimer = [[NSTimer scheduledTimerWithTimeInterval:.05 target:self selector:@selector(toggleHighlightedMenuCell) userInfo:nil repeats:YES] retain];
self.blinkTimer = blinkTimer;
[blinkTimer release];
}
-(void) toggleHighlightedMenuCell
{
if (self.highlightedMenuCell.isHighlighted)
{
self.highlightedMenuCell.highlighted = NO;
}
else
{
self.highlightedMenuCell.highlighted = YES;
}
self.blinkTimerCounter++;
if (self.blinkTimerCounter == 2)
{
self.blinkTimerCounter = 0;
[self.blinkTimer invalidate];
//execute some code
}
}
问题是它似乎在完成闪烁之前就开始执行
//executesomecode
部分中的代码。有谁能想出更好的方法来完成这项任务吗?我认为你的时间间隔太短,无法有效地观察。我不认为“执行一些代码”实际上是在闪烁结束之前执行的,它看起来就是这样。也不需要执行retain和release语句,也不需要将计时器分配给变量。运行循环保留计时器,并在计时器无效时释放它。但是,选择器的名称后面应该有一个冒号,因为计时器将自身作为参数传递。因此,代码可以简化为:
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(toggleHighlightedMenuCell:) userInfo:nil repeats:YES];
}
-(void) toggleHighlightedMenuCell:(NSTimer *) aTimer
{
if (self.highlightedMenuCell.isHighlighted)
{
self.highlightedMenuCell.highlighted = NO;
}
else
{
self.highlightedMenuCell.highlighted = YES;
}
self.blinkTimerCounter++;
if (self.blinkTimerCounter == 2)
{
self.blinkTimerCounter = 0;
[aTimer invalidate];
//execute some code
}
}
我假设您已在其他地方初始化了BlinkTimer计数器。我认为您的时间间隔太短,无法有效地查看。我不认为“执行一些代码”实际上是在闪烁结束之前执行的,它看起来就是这样。也不需要执行retain和release语句,也不需要将计时器分配给变量。运行循环保留计时器,并在计时器无效时释放它。但是,选择器的名称后面应该有一个冒号,因为计时器将自身作为参数传递。因此,代码可以简化为:
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(toggleHighlightedMenuCell:) userInfo:nil repeats:YES];
}
-(void) toggleHighlightedMenuCell:(NSTimer *) aTimer
{
if (self.highlightedMenuCell.isHighlighted)
{
self.highlightedMenuCell.highlighted = NO;
}
else
{
self.highlightedMenuCell.highlighted = YES;
}
self.blinkTimerCounter++;
if (self.blinkTimerCounter == 2)
{
self.blinkTimerCounter = 0;
[aTimer invalidate];
//execute some code
}
}
我假设您已经在其他地方初始化了blinkTimerCounter。最终将一些UIView动画链接在一起,它最终工作得非常完美:
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[UIView animateWithDuration:.05 delay:0 options:0 animations:
^{
self.highlightedMenuCell.highlighted = !self.highlightedMenuCell.highlighted;
}
completion:^(BOOL finished)
{
[UIView animateWithDuration:.05 delay:0 options:0 animations:
^{
self.highlightedMenuCell.highlighted = !self.highlightedMenuCell.highlighted;
}
completion:^(BOOL finished)
{
if ([self.menuViewDelegate respondsToSelector:@selector(menuView:didSelectMenuItem:viaTouchType:)])
{
[self.menuViewDelegate menuView:self didSelectMenuItem:self.highlightedMenuCell.menuItem viaTouchType:TouchTypeTouchUpInside];
}
}];
}];
}
最终将一些UIView动画链接在一起,最终效果非常好:
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[UIView animateWithDuration:.05 delay:0 options:0 animations:
^{
self.highlightedMenuCell.highlighted = !self.highlightedMenuCell.highlighted;
}
completion:^(BOOL finished)
{
[UIView animateWithDuration:.05 delay:0 options:0 animations:
^{
self.highlightedMenuCell.highlighted = !self.highlightedMenuCell.highlighted;
}
completion:^(BOOL finished)
{
if ([self.menuViewDelegate respondsToSelector:@selector(menuView:didSelectMenuItem:viaTouchType:)])
{
[self.menuViewDelegate menuView:self didSelectMenuItem:self.highlightedMenuCell.menuItem viaTouchType:TouchTypeTouchUpInside];
}
}];
}];
}
它在闪烁结束前执行代码@rdelmarSorry,我刚刚错过了你帖子的那部分。它在闪烁结束前执行代码@rdelmarSorry,我刚刚错过了你帖子的那部分。谢谢你的回复+1。谢谢你的回复+1。