Изменить поведение автоповтора UIStepper - PullRequest
2 голосов
/ 21 марта 2012

У меня есть клиент, который хочет, чтобы я изменил поведение автоповтора UIStepper.

Если пользователь выбирает касания и удерживает, скажем, кнопку + на шагере, значение шагера начинает увеличиваться со скоростью 1 каждые полсекунды или около того, а затем примерно через 3 секунды значения начинают меняться гораздо быстрее .

Можно ли как-то изменить, как это работает, чтобы, например, значения сразу увеличивались с большей скоростью, если пользователь нажимает и удерживает?

Я посмотрел документацию по UIStepped и ничего не увидел по этому поводу, но мне было интересно, есть ли способ сделать это через IBAction или что-то в этом роде.

Ответы [ 2 ]

7 голосов
/ 25 июля 2013

Сначала добавьте два действия для вашего степпера:

[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;

}

1 голос
/ 29 марта 2012

Кажется, что невозможно изменить это поведение, и использование пользовательских кнопок UIB является лучшим решением.

...