Большой палец UISlider перестает перетаскивать

У меня есть UISlider в представлении, в типичном подробном контроллере представления. Когда я касаюсь ползунка, я могу перетащить его влево, а после того, как я перетащу его влево, я могу продолжать перетаскивать его, куда захочу, но когда я перетаскиваю его вправо, он перемещается на несколько пикселей, а затем перетаскивание останавливается.

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

У меня нет примера кода для включения, потому что в случае, с которым у меня возникли проблемы, действительно не так много кода. У меня есть подкласс UIViewController, на котором есть UISlider, и у меня есть действие, сгенерированное IB, для события «Value Changed». Это срабатывает, и, как я уже сказал, я могу перетаскивать ползунок влево, но не вправо.

Я попытался изменить действие, поэтому все, что он делает, это значение ползунка NSLog, и это не помогает.

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

Обновить

Итак, я нашел проблему. Это ошибка в iOS 5.1, описанная в 5.1 Жест смахивания перехватывается UISplitViewController — как избежать?.

Я отследил это, перечислив все распознаватели жестов (путем обхода иерархии представлений от self.view.window и сброса их), а затем выборочно удалив их, а затем погуглив тот, который в конечном итоге вызвал проблему. Боль в ягодицах. Оставь это здесь для следующей жертвы.


person stevex    schedule 03.07.2012    source источник
comment
Можете ли вы предоставить проект (github, dropbox), демонстрирующий такое поведение?   -  person CodaFi    schedule 03.07.2012
comment
Я никогда не сталкивался с такой проблемой, если это простой код, то можно ли загрузить проект в Dropbox и поделиться общедоступной ссылкой или, возможно, github.   -  person TeaCupApp    schedule 03.07.2012
comment
@CodaFi, чертова избыточность! ржу не могу   -  person TeaCupApp    schedule 03.07.2012
comment
Это довольно сложное приложение, поэтому я не могу опубликовать все это на GitHub, и проблема не возникает в простом тестовом приложении. Вот еще одна информация: это не происходит на iPhone, только на iPad. Это пахнет взаимодействием с распознавателем жестов, но я закомментировал все распознаватели жестов во всем приложении, и проблема все еще остается. Есть ли что-нибудь еще, что может помешать сенсорным событиям, которые получает ползунок?   -  person stevex    schedule 03.07.2012
comment
Я только что написал некоторый код для поиска и удаления всех распознавателей жестов (в основном обходя UIViews из корневого окна и удаляя их все), и после того, как я это сделаю, проблема исчезнет. Я вижу, что есть довольно много распознавателей жестов, которые я не устанавливал (или даже не распознавал, например UIGobblerGestureRecognizer), которые, вероятно, являются внутренними для UIKit. Так что теперь, чтобы выяснить, кто из них дает мне горе.   -  person stevex    schedule 03.07.2012
comment
@stevex, можете ли вы поделиться кодом своего решения. У меня такое же поведение на IOS8!!!   -  person DaSilva    schedule 13.11.2014


Ответы (3)


Я опубликовал ответ как обновление вопроса, но в двух словах это ошибка iOS 5.1. Распознаватель жестов панорамирования для контроллера разделенного представления мешает работе ползунка. Мой обходной путь - отключить этот распознаватель.

person stevex    schedule 07.07.2012

Вероятно, вы пытаетесь увеличить значение ползунка до значения, превышающего 1. Вам нужно ввести число с плавающей запятой от 0 до 1, например 0,46.

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

person bkbeachlabs    schedule 03.07.2012
comment
В настоящее время я ничего не устанавливаю для значения, поэтому не думаю, что это будет проблемой. Кроме того, максимальное значение по умолчанию равно 1,0, но я использую другое значение (в данном случае 2,0), поэтому значение не должно быть меньше 1,0. Если ползунок находится в середине диапазона, и я хватаю его и перетаскиваю вправо, он немного перемещается, а затем останавливается; но если я возьму его и перетащу влево, он будет двигаться нормально, в том числе перетаскивая вправо. - person stevex; 03.07.2012
comment
очень странно. Опубликуйте код, если вам все еще нужна помощь. Я был бы рад просмотреть его. - person bkbeachlabs; 03.07.2012

Короткий ответ:

Попробуйте установить ползунок с continuous на NO.

Длинный ответ:

Я столкнулся с похожей проблемой: большой палец ползунка не двигался на симуляторе iPad 5.1. Хотя на iOS 6 проблем нет. В моем случае я устанавливал ползунки minimumValue и maximumValue на некоторые другие значения в коде. Проблема исчезла после того, как я установил для свойства continuous значение NO. Соответствующий фрагмент кода:

            self.precisionSlider.minimumValue = 0;
            self.precisionSlider.maximumValue = 15;
            self.precisionSlider.continuous = NO;
person Maxim Chetrusca    schedule 09.08.2013