2016-12-29 2 views
0

У меня есть подкласс UIButton. Прямо сейчас, я использую фоновое изображение значка игры, чтобы он правильно масштабировался между изменениями ориентации. Когда вы нажимаете на кнопку, значок воспроизведения темнеет, как ожидалось. Когда вы отпускаете, он возвращается к исходному цвету. Это реализовано iOS по умолчанию.Получить цвет, который применяется к фоновому изображению UIButton при нажатии

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

tintColor не является собственностью, которую я ищу, поскольку она всегда сообщает синий цвет по умолчанию. Как получить доступ к оттенку фонового изображения, который, как представляется, применяется, когда UIButton находится в выбранном состоянии?

Fwiw, я пишу это в Swift 2.3.

+1

Я не вижу никакого кода, поэтому я, возможно, уйду. У меня есть две идеи, которые я разберу в двух комментариях. Оба могут (по крайней мере) потребовать некоторого рефакторинга вашего подхода. Первая мысль: если вы используете изображения в своем подклассе UIButton, то почему бы не найти правильные изображения и не импортировать их в свое приложение? (Вы можете сделать это, даже если это фреймворк.) Найдите подходящее приложение, нажмите «Ctrl-click» и просмотрите содержимое этого приложения. Я знаю, вы действительно можете нарушить правило IP. Тем не менее, это моя первая мысль. – dfd

+2

Моя вторая мысль. Код немного глубже, чем просто подклассификация UIButton. Все, что вы получаете, это UIButtonState, что звучит так, как будто этого недостаточно. Но базовым классом UIButton является UIControl. Кроме того, базовым классом любого вида (UIControl?) Является UIView. В какой-то момент вы можете сворачивать свои собственные события - это означает, что вы можете добраться до ** touchDown **. Нажмите на * этот * слой событий, и вы можете найти то, что вам нужно, я думаю. – dfd

+0

Спасибо! Причина, по которой мы не просто имеем изображения кнопок с кругом, который я сейчас рисую, - это то, что изображение, предоставленное клиентом, уже немного не в центре, и нам нужно анимировать над серым кругом, чтобы выстроиться идеально. Когда я попытался создать круг как часть изображения, анимация, которую я рисую, всегда будет пикселем или двумя. ** РЕДАКТИРОВАНИЕ **: Даже корректировка положения в коде анимации все равно приведет к несовершенным результатам. – FateNuller

ответ

1

Извините, если я наивна, но почему бы не вырваться из приложения Digital Color Meter, измерить цвет нажатой кнопки и использовать это значение RGB в вашем коде? Это не очень будущее доказательство, если Apple изменит визуальное поведение нажатия кнопки, но я не думаю, что ваш подход также является будущим доказательством.