修改 UIStepper 自动重复行为
Posted
技术标签:
【中文标题】修改 UIStepper 自动重复行为【英文标题】:Modify UIStepper autorepeat behaviour 【发布时间】:2012-03-21 17:07:36 【问题描述】:我有一个客户希望我修改 UIStepper 的自动重复行为。
如果用户选择触摸并按住步进器的 + 按钮,步进器的值开始以每半秒左右 1 的速率增加,然后大约 3 秒后,值开始变化得更快.
有没有办法修改它的工作方式,例如,如果用户点击并按住,值会立即以更快的速度增加?
我查看了 UIStepped 文档,但没有看到任何关于此的内容,但我想知道是否有办法通过 IBAction 或其他方式来做到这一点。
【问题讨论】:
使用您的自定义按钮而不是UIStepper
【参考方案1】:
首先,为您的步进器添加两个动作:
[theStepper addTarget:self action:@selector(stepperTapped:) forControlEvents:UIControlEventTouchDown];
[theStepper addTarget:self action:@selector(stepperValueChanged:) forControlEvents:UIControlEventValueChanged];
这些操作如下所示:
- (IBAction)stepperTapped:(id)sender
self.myStepper.stepValue = 1;
self.myStartTime = CFAbsoluteTimeGetCurrent();
- (IBAction)stepperValueChanged:(id)sender
self.myStepper.stepValue = [self stepValueForTimeSince:self.myStepperStartTime];
// handle the value change here
这是神奇的代码:
- (double)stepValueForTimeSince:(CFAbsoluteTime)aStartTime
double theStepValue = 1;
CFAbsoluteTime theElapsedTime = CFAbsoluteTimeGetCurrent() - aStartTime;
if (theElapsedTime > 6.0)
theStepValue = 1000;
else if (theElapsedTime > 4.0)
theStepValue = 100;
else if (theElapsedTime > 2.0)
theStepValue = 10;
return theStepValue;
【讨论】:
这对我有好处(翻译成 Swift)。但是,系统的增量仍然在不断加快。我的建议是取消选中 Autorepeat 行为,添加 touchup (inside+outside) 动作,并实现 Timer。我会尽快试试这个。【参考方案2】:似乎无法修改这种行为,使用自定义 UIButtons 是最好的解决方案。
【讨论】:
以上是关于修改 UIStepper 自动重复行为的主要内容,如果未能解决你的问题,请参考以下文章