Получить пользовательский подкласс UIView, чтобы следовать UIControl вокруг - PullRequest
1 голос
/ 01 декабря 2011

У меня есть подкласс UIControl, который представляет собой переключатель ползунка, с переменной «процент», которая хранит текущую позицию ползунка, то есть 0.0 означает, что ползунок находится слева, 1.0 означает, что ползунок находится справа,У меня есть два изображения, которые выглядят как речевые пузыри, и когда пользователь щелкает ползунок, я хочу отобразить одно из этих изображений (они имеют одинаковый размер, но выглядят по-разному, так что одно отображается, если процент <= 0,5, а другое - еслипроцентов> 0,5) и следите, чтобы «хвост» речевого пузыря следовал за ползунком (т. е. рамка была установлена ​​как функция процента).

Я создал пользовательский UIView для изображения, которое меняет изображениедля отображения через логический параметр.Я попытался создать параметр в подклассе UIControl, который рисует UIView вместе со всем другим рисунком, но мне нужно нарисовать его вне прямоугольника UIControl, что нельзя сделать изнутри drawRect: метод UIControl.Что может быть хорошим способом управления этими двумя представлениями и обеспечения того, чтобы речевой пузырь всегда обновлялся при изменении процентного значения UIControl?

Ответы [ 4 ]

1 голос
/ 01 декабря 2011

Спасибо за ответы - оказалось, что лучший способ сделать это - объявить протокол делегата для моего пользовательского UIControl и назначить представление речевого пузыря делегатом.Затем я создал метод, который сообщает речевому пузырю обновить местоположение (передавая местоположение) и вызывал его из UIControl всякий раз, когда позиция элемента управления обновляется.

1 голос
/ 01 декабря 2011

Прежде всего, убедитесь, что свойство continuous установлено на TRUE в вашем UISlider.

Затем убедитесь, что у вас есть IBAction для получения событий обновления от вашего UISlider. Вы можете легко установить соединение в Интерфейсном Разработчике (встроенном в XCode 4) или сделать это программно, используя метод UIControl addTarget:action:forControlEvents:.

И, наконец, внутри этого IBAction вы теперь можете изменить фрейм вашего "речевого пузыря" UIView (не забудьте связать его с вашим родительским контроллером представления в качестве члена в вашем файле @interface .h). Место, где оно появляется по отношению к ползунку, оставлено вам как домашнее задание (потому что оно действительно зависит от реализации - или, иначе говоря, то, как оно выглядит, зависит от каждого отдельного приложения и программиста).

Надеюсь, эта информация поможет вам!

1 голос
/ 01 декабря 2011

Звучит так, будто ваш UIControl должен быть просто:

  • Достаточно высоким, чтобы вместить панораму и пузырьковый вид
  • Прозрачный (чтобы вы могли видеть за частью вида, гдепузырь "скользит")

Или я что-то упустил?

0 голосов
/ 01 декабря 2011

Вероятно, самый простой способ - добавить в UIControl свойство, указывающее на UIView, и переместить его в метод (ы), где вы изменяете состояние элемента управления.Конечно, для этого вам нужно создать класс, подобный MyCustomControl, который расширяет UIControl.

...