UISegmentedControl ошибка делителя

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

Вниз, по цели:

Вниз по цели

Вниз, оттянутый палец от цели:

Вниз с цели

Учитывая, что 0 означает нормальное состояние, 1 выбранное состояние и 2 выделенное состояние; У меня есть все правильные изображения разделителей, и я устанавливаю их для каждого случая, то есть:

00, 01, 02 10, 11, 12 20, 21, 22 

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

Нет необходимости предоставлять изображения разделителей для состояний «11» и «22», поскольку логически вы не можете иметь 2 смежных выделенных сегмента или 2 смежных выделенных сегмента. Ну, только если одновременное нажатие смежных сегментов выделит их оба, но вряд ли.

Поэтому вы должны иметь следующие разделительные образы:

 00, 01, 02 10, --, 12 20, 21, -- 

Кроме того, у вас также должно быть 3 фоновых изображения для всех трех разных состояний (Normal, Selected и Highlighted). Причина этих фоновых изображений, а также то, как их создать, я объяснил здесь (в этом объяснении я использовал только 2 фоновых изображения для состояний Normal и Selected, но если вы хотите использовать выделенное состояние, вам нужно добавить третий фоновый рисунок ).

Вот диаграмма, показывающая, как эти изображения используются в UISegmentedControl: введите описание изображения здесь

А затем установите их, используя следующие методы внешнего вида:

 // Set background images [segmentedControl setBackgroundImage:background_image_normal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [segmentedControl setBackgroundImage:background_image_selected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; [segmentedControl setBackgroundImage:background_image_highlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; // Set divider images 0=Normal 1=Selected 2=Highlighted [segmentedControl setDividerImage:divider_image_00 forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_01 forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_10 forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_02 forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_20 forLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_12 forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_21 forLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault] 

Возможное решение состоит в том, чтобы вручную подклассифицировать UISegmentedControl и переопределять его, чтобы убедиться, что состояние делителя правильно «очищено» при вызове событий UIResponder. Может быть, сегмент ожидает, что touchsMoved событие произойдет в тех же границах, что и начальные штрихиBegan.

Не забывайте, что UIControlStateSelected | UIControlStateHighlighted

 // Set background images UIImage *normalBackgroundImage = [UIImage imageNamed:@"segmented-background-unselected"]; UIImage *selectedBackgroundImage = [UIImage imageNamed:@"segmented-background-selected"]; [self setBackgroundImage:normalBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setBackgroundImage:selectedBackgroundImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; [self setBackgroundImage:normalBackgroundImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; [self setBackgroundImage:selectedBackgroundImage forState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; // Set divider images UIImage *buttonImageLeftSelected = [UIImage imageNamed:@"segmented-left-selected"]; UIImage *buttonImageNoneSelected = [UIImage imageNamed:@"segmented-none-selected"]; UIImage *buttonImageRightSelected = [UIImage imageNamed:@"segmented-right-selected"]; [self setDividerImage:buttonImageNoneSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageLeftSelected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageLeftSelected forLeftSegmentState:UIControlStateSelected | UIControlStateHighlighted rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageLeftSelected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageRightSelected forLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageRightSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageRightSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
  • iOS 7 - UISegmentedControl не остался выделенным?
  • UISegmentedControl с значком или выделение
  • UISegmentedControl: как не выделять уже выбранный сегмент при использовании пользовательских изображений
  • UISegmentedControl с квадратными углами
  • iOS - Изменить шрифт текста для каждого сегмента в UISegmentController
  • iOS: изменение высоты UISegmentedcontrol
  • Настроить UISegmentedControl, добавить фоновое изображение и выбранный цвет оттенка сегмента
  • iOS - UISegmentedControl Странное поведение
  • добавление сегментированного управления с помощью панели навигации
  • iOS: пользовательский UISegmentedControl не настраивается при изменении ориентации
  • Нажмите на уже выбранный сегментный контроль swift
  • Interesting Posts

    конвертировать большие данные yml

    Как я могу вернуть все песни по альбому (collectionID) из API поиска Apple itunes

    Ошибка Xcode: не удается проанализировать отладочную карту: нет такого файла или каталога в приложении iOS

    Большая копия файла с GCD – Dispatch IO потребляет большие объемы памяти

    Swift – Делегировать не вызывающий метод из другого класса

    Служба уведомлений Apple для приложения для джейлбрейка

    Читать текст с картинки iPhone SDK

    Удалите пробел 20px с правой стороны HTML-почты на iOS

    Как использовать Storyboard для размещения содержимого экрана, который выше экрана на Xcode 7.2?

    Пользовательский вид подсказки карты скрывается при нажатии

    Результат AVCaptureMovieFileOutput отличается от того, что видно в AVCaptureVideoPreviewLayer при увеличении с включенной стабилизацией

    NSDate возвращает «1604» за год?

    Быстрые протоколы и полиморфизм

    Как хранить слабый ссылочный объект в массиве, словарь в objc?

    NSDateFormatter-stringFromDate не возвращает AM / PM

    Давайте будем гением компьютера.