Глядя на свойства, которые предоставляет UISlider, вы можете получить достаточно четкое представление о том, что, хотя класс предназначен для того, чтобы вы могли настраивать его внешний вид, динамически изменяя внешний вид элемента управления по мере его настройки пользователем, вероятно, это не то, что разработчик имел в виду. В противном случае они включили бы предложенный вами механизм: средство для привязки разных изображений к диапазонам значений.
Первое, что приходит на ум, если вы хотите упростить свой подход, это использовать KVO для наблюдения за слайдером. Если бы вы могли получать уведомления каждый раз, когда значение ползунка обновляется, вы можете обновить изображение большого пальца в одном месте. К сожалению, похоже, что UISlider не полностью поддерживает KVO .
Следующим, что я рассмотрю, будет создание собственного элемента управления ползунком. Это не ракетостроение - все, что вам нужно, это нарисовать элемент управления, провести большим пальцем сверху и позволить большому пальцу скользить в одном измерении. Если вы сделаете большой палец подвидом остальной части элемента управления, это просто кусок пирога. Затем вы можете добавить поддержку KVO, если хотите, или пройти весь путь и поддерживать разные изображения большого пальца для разных диапазонов.
Если вы не хотите этого делать, вы можете создать подкласс UISlider, чтобы добавить свой массив изображений, массив диапазонов и переопределение -setValue:
, чтобы использовать их.
Наконец, то, что у вас есть сейчас, не так уж и плохо. Если вы повторили код как в своих действиях, так и в -handleZoom
методах, это не так хорошо, но должно быть просто выделить общий код в подходящий метод, который можно вызывать из обоих мест.