2011-01-12 2 views
15

Я использую UISlider, его обновление автоматически, за исключением того, что пользователь прикасается к слайдер-кнопке. Поэтому я сделал это в функцию, которая автоматически обновляется с помощью NSTimer:События UISlider

if (!isSliderTouched) { 
    [progressSlider setValue: progressValue]; 
} 

Как отслеживать окончание этого события, когда пользователь отпускает палец. Я хочу установить isSliderTouched, пока пользователь взаимодействует с этим элементом управления.

EDIT: это должно быть сюжет:

  1. beginns пользователь draging/прикасаясь UISlider =>isSliderTouched = YES
  2. пользователь отпустит/Untouch UISlider =>isSliderTouched = NO

Решение:

UIControlEventTouchDown 
UIControlEventTouchUpInside 
[progressSlider addTarget:self action:@selector(sliderMoveStart) forControlEvents:UIControlEventTouchDown]; 

веселит эндо

+0

Я читал это несколько раз, и мне все еще не ясно, чего вы хотите. Но TouchUpInside - это событие, которое вы слушаете, когда определять, когда пользователь выбирает пальцы. – madmik3

+0

Я попытался объяснить это лучше, см. Обновление –

+0

TouchUpInSide вызывается дважды :( – AsifHabib

ответ

14

Вы можете использовать:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

, чтобы определить, когда происходят touchDown и touchUp события. Вы можете установить свой флаг соответствующим образом.

Я угадываю из вашего фрагмента кода, что вы используете UISlider в качестве индикатора прогресса. Вы считали, что вместо этого используете UIProgressView?

+0

thx, для вашего намека. UIProgressView не имеет кнопки для слайда, поэтому это не то, что мне нужно. –

+1

Постоянный параметр - это то, что вам нужно http://developer.apple.com/library/ios/documentation/uikit/reference/UISlider_Class/Reference/Reference. html # // apple_ref/occ/instp/UISlider/непрерывный – serhats

+0

Не уверен вокруг правил на SO, просто хотел указать вам, ребята, что есть лучший способ сделать это для элементов управления UISlider. См. Мой ответ. – Geebs

1

когда пользователь Touchs ползунка можно установить логический переменный флаг и сделать его НЕТ. и в методе обновления проверьте, установлен ли флаг YES или NO.

+0

Я думаю, что вы пропустили меня. Я хочу, чтобы пользователь мог использовать слайдер, но не то, что процесс автоматического обновления выполняет обновление, пока пользователь использует его –

+0

, чем вы должны использовать метод valueChanged или функцию, которая будет запускать функцию, связанную с valueChanged – Robin

+0

нет, когда пользователь коснулся кнопки, но не двигается. После этого происходит автоматическое обновление. –

6

Это пометка решена, и все же я хотел бы добавить еще одно решение, которое я считаю более чистым.

if (!progressSlider.highlighted) { 
    [progressSlider setValue: progressValue]; 
} 
+0

Несколько человек проголосовали за это по какой-то причине. Возможно, мне следовало бы объяснить лучше: Объекты UISlider имеют свойство «выделенного», которое является YES, когда слайдер прикасается/перетаскивается. Вы можете использовать это непосредственно, чтобы понять, когда обновлять значение, а когда нет. Если кто-то хочет понизить, пожалуйста, дайте мне знать, что вы считаете неправильным с ответом :) – Geebs

+0

Для меня этот метод, казалось, обнаруживал, когда слайдер был сначала нажат, а не когда он был выпущен. –

+0

Макс, он фактически дает состояние (коснутое или не затронутое), а не обнаружение событий нажатия или выпуска. Человек, задающий вопрос, хотел установить isSliderTouched на основе событий начала и окончания. Я предполагаю, что он может просто использовать «выделенное» свойство вместо создания isSliderTouched и выяснить начало и конец касания. – Geebs

8

Улучшенный способ отслеживания выполнения пользователем взаимодействия с UISlider заключается в использовании непрерывного флага.

Если вы хотите, чтобы вызвать слайдер действие только после того, как действие завершено, и пользователь переместил его палец тогда использовать

[blurSlider addTarget:self action:@selector(blurSliderChanged) forControlEvents:UIControlEventValueChanged]; 
    blurSlider.continuous = NO; 

В противном случае по умолчанию его значение Да.

[blurSlider addTarget:self action:@selector(blurSliderChanged) forControlEvents:UIControlEventValueChanged]; 
    blurSlider.continuous = YES; 
Смежные вопросы