拖动时在 UIButton 上填充背景颜色
Posted
技术标签:
【中文标题】拖动时在 UIButton 上填充背景颜色【英文标题】:Fill background color on UIButton while dragging 【发布时间】:2016-06-30 01:00:06 【问题描述】:我有一个蓝色背景的自定义UIButton
。
当我将手指拖到UIButton
上时,我需要填充红色背景色。当我向后拖动手指时,红色应该会消失。
我尝试在UIGestureRecognizerStateEnded
状态下使用UIPanGestureRecognizer
实现。如果不在 UIButton
之上添加另一个视图,我无法在按钮背景中获得红色。
还有其他方法可以实现吗?
【问题讨论】:
【参考方案1】:使用UIButton
的Sent Event properties
更改拖动时间颜色使用TouchDragEnter
和收回相同的颜色使用TouchCancel
。
对你有帮助吗?
【讨论】:
【参考方案2】:添加目标:
[button addTarget: self
action: @selector(buttonTouchStarted:withEvent:)
forControlEvents: UIControlEventTouchDragEnter | UIControlEventTouchDown];
[button addTarget: self
action: @selector(buttonTouchEnded:withEvent:)
forControlEvents: UIControlEventTouchDragExit | UIControlEventTouchUpInside | UIControlEventTouchCancel];
并在控件事件处理程序中重新定位红色覆盖视图:
- (void) buttonTouchStarted:(UIButton *)button withEvent:(UIEvent *)event
CGPoint location = [[event touchesForView:button].anyObject locationInView:button];
UIView *redView = [button viewWithTag:42];
if (! redView)
// Install a red overlay
redView = [[UIView alloc] initWithFrame:CGRectZero];
redView.backgroundColor = [UIColor redColor];
redView.alpha = 0.5f;
redView.tag = 42;
// IMPORTANT: We don't want this overlay view to block touches
redView.userInteractionEnabled = NO;
[button addSubview:redView];
CGRect frame = button.bounds;
frame.size.width = location.x;
redView.frame = frame;
- (void) buttonTouchEnded:(UIButton *)button withEvent:(UIEvent *)event
UIView *redView = [button viewWithTag:42];
if (redView)
[redView removeFromSuperview];
【讨论】:
感谢您的宝贵时间。不更改触摸事件中的背景颜色。拖动时背景颜色应为实时绘图。它类似于通过光标选择一个单词。对不起,如果我的问题误导了你。 我编辑了我的答案。那是你想要做的吗?如果没有,编辑问题可能会有所帮助。以上是关于拖动时在 UIButton 上填充背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
UIButton adjustsImageWhenHighlighted 属性与背景颜色