我在我的一个应用程序中实现了Vertical Slider,它扩展了UISlider
。当滚动结束/完成时,我将使用Slider值向服务器发送命令。有时当我快速向上/向下滚动并释放时,滑块值在发送命令之前和发送命令之后都会不匹配。
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Value of Slider before sending command=%f",self.value);
[self sendCommand]; // Here value is something else
[super touchesEnded:touches withEvent:event];
NSLog(@"Slider value after sending command=%f",self.value); // Here value changed
}
但如果我在发送命令之前发出超级电话,那么一切正常。请解释是否有人知道为什么会这样。
[super touchesEnded:touches withEvent:event];
更有趣的事实是,如果我不打电话给超级,那么一切都运作良好。
答案 0 :(得分:0)
这是因为方法[super touchesEnded:touches withEvent:event];
是滑块根据交互更新其值的位置。因此,在调用super之前,该值已过期。
对super的调用通常应该是重写方法的第一行。
答案 1 :(得分:0)
即使名称touchesEnded:
暗示滑块已完成更新,它仍然可能会根据用户抬起手指的方式更新值。如果你想到一个用户快速滑动然后抬起他们的手指,这是有道理的 - 他们可能期望它在那个方向上比他们的手指实际上走得更远。
答案 2 :(得分:-1)
当手指或Apple Pencil不再使用时,UIKit会调用此方法 触摸屏幕。许多UIKit类重写此方法并使用 它清理涉及相应处理的状态 触摸事件。此方法的默认实现转发 消息响应者链。在创建自己的子类时, 打电话给超级转发你自己没有处理的任何事件。对于 例如,{{1}}
如果在不调用super的情况下覆盖此方法(常用) pattern),你还必须覆盖其他处理触摸的方法 事件,即使您的实现什么都不做。