[新手请教] 如何让 UIView 点击一下 backgroundColor 变深然后再变回来(类似按钮点击后的交互效果)

2015-09-05 22:46:49 +08:00
 hustlzp
目前我是这么做的:

```objc
- (void )loadView
{
self.view = [UIView new];

UIView *shareView = [UIView new];
[self.view addSubview:shareView];
shareView.backgroundColor = [UIColor colorWithRGBA:0xEEEEEEFF];
shareView.userInteractionEnabled = YES;
UITapGestureRecognizer *gestureForShare = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector (shareViewClicked:)];
gestureForShare.numberOfTapsRequired = 1;
[shareView addGestureRecognizer:gestureForShare];
}

- (void )shareViewClicked:(UITapGestureRecognizer *)gestureRecognizer
{
gestureRecognizer.view.backgroundColor = [UIColor colorWithRGBA:0xDDDDDDFF];
// 背景变暗持续 0.2s 后变回来
dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(0.2 * NSEC_PER_SEC )), dispatch_get_main_queue (), ^{
gestureRecognizer.view.backgroundColor = [UIColor colorWithRGBA:0xEEEEEEFF];
});
}
```

效果虽然实现了,但总感觉别扭,不知道大家是怎样做的...请教下。
4075 次点击
所在节点    iDev
13 条回复
hustlzp
2015-09-05 22:49:30 +08:00
按这种思路,如果需要再加上长按时背景变色的效果,那还得加上 longPressGesture ,然后根据 gesture 的状态进行背景色改变,感觉有点麻烦。
hustlzp
2015-09-05 22:56:37 +08:00
或者 subclass UIControl ,然后在 beginTrackingWithTouch 和 endTrackingWithTouch 中进行背景色改变?
wanganjun
2015-09-05 22:59:31 +08:00
感觉别扭可能是因为颜色变化太突然了吧,颜色逐渐变化的话,效果应该回好不少
hustlzp
2015-09-05 23:10:00 +08:00
@wanganjun 效果还好。就是感觉这种代码实现有点别扭。
wanganjun
2015-09-05 23:32:20 +08:00
原来咱们说的不是同一个东西
onevcat
2015-09-05 23:42:00 +08:00
touchesBegan , touchesEnded
fghfjujiber
2015-09-05 23:49:49 +08:00
用 touchesBegin: / touchesEnded: / touchesCanceled 会不会好些?
hustlzp
2015-09-05 23:59:37 +08:00
@onevcat 谢喵大指点!
hustlzp
2015-09-05 23:59:55 +08:00
@fghfjujiber 已经用上了, THX !
kobe1941
2015-09-06 11:29:04 +08:00
比如,短暂点一下背景变为灰色, 0.2 秒后恢复最初颜色,长按时背景变为红色,手指离开颜色恢复。
但是怎么区分用户是短暂点一下还是长按呢?
chmlai
2015-09-06 11:51:30 +08:00
Gesture 明显比 touchBegan/Ended 好.
hustlzp
2015-09-06 18:04:35 +08:00
@kobe1941 添加一个 tap gesture 和一个 long press gesture 就可以区分。
kobe1941
2015-09-07 10:09:37 +08:00
@hustlzp 额,单纯加手势当然是 OK 的,我试着用 touchBegan 和 touchEnded ,好像不大好做,不好判断手指落在控件上的时间,所以区分是点一下,还是长按比较纠结

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/218458

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX