Выделение подкласса UIControl
в основном мне нужна кнопка изображения, в частности пользовательский объект, который:
1) вызывает действие контроллера при использовании
2) инкапсулирует пользовательские данные
3) автоматически перемещается по обертке (не относится)
Ну, я получил все это с подклассом UIControl
(так как подклассификация UIButton
не рекомендуется, а подклассификация UIImageView
затрудняет управление точкой 1).
Но каков правильный способ подчеркнуть это?
Я хотел бы выделить элемент управления при любом нажатии (даже простое мгновенное уменьшение альфы).
С beginTrackingWithTouch
и endTrackingWithTouch
я не могу распознать только событие UIControlEventTouchUpInside
.
Просмотр анимации в контроллере? Мне кажется грубое решение
Есть ли простое и немедленное решение?
Спасибо: (
Ответы
Ответ 1
Я думаю, что UIControls автоматически правильно устанавливает свое выделенное свойство, основанное исключительно на событиях касания. Вам нужно переопределить метод -setHighlighted:
для реализации определенного алгоритма:
- (void) setHighlighted: (BOOL) highlighted {
[super setHighlighted: highlighted];
// Only as an example. Caution: looks like a disabled control
self.alpha = highlighted ? 0.5f : 1.0f;
}
Ответ 2
В интересах поддержания этого ответа в актуальном состоянии, это Swift версия (ответа Costique).
override var highlighted: Bool {
didSet {
alpha = highlighted ? 0.6 : 1.0 // Sets alpha to 0.6 if highlighted, or 1.0 if it not.
}
}
Вам также может понравиться постепенное уменьшение яркости UIControl. Для этого просто поместите альфа-назначение в блок анимации, например
override var highlighted: Bool {
didSet {
UIView.animateWithDuration(0.25) { _ in
self.alpha = self.highlighted ? 0.6 : 1.0
}
}
}
Ответ 3
Чтобы выделить субстраты UIControl
правильно, вы можете использовать пользовательский цвет оттенка. Чтобы включить это, где-нибудь в методах init
или awakeFromNib
вы должны изменить режим рендеринга изображения на always template
:
self.imageView.image = [self.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.backgroundImageView.image = [self.backgroundImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.tintColor = [UIColor zst_blueColor]; // Use custom instead of system-defined color
Поэтому вместо изменения значения alpha
мы можем изменить цвет оттенка, и он автоматически изменит его UIImageView
subviews. В методе setHighlighted:
вы можете изменить цвет текста и оттенков темным цветом:
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
UIColor *tintColor = highlighted ? [UIColor zst_darkerBlueColor] : [UIColor zst_blueColor];
self.tintColor = tintColor;
self.titleLabel.textColor = tintColor;
}