V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
hustlzp
V2EX  ›  iDev

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

  •  
  •   hustlzp ·
    hustlzp · 2015-09-05 22:46:49 +08:00 · 4053 次点击
    这是一个创建于 3374 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我是这么做的:

    - (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];
        });
    }
    

    效果虽然实现了,但总感觉别扭,不知道大家是怎样做的...请教下。

    13 条回复    2015-09-07 10:09:37 +08:00
    hustlzp
        1
    hustlzp  
    OP
       2015-09-05 22:49:30 +08:00
    按这种思路,如果需要再加上长按时背景变色的效果,那还得加上 longPressGesture ,然后根据 gesture 的状态进行背景色改变,感觉有点麻烦。
    hustlzp
        2
    hustlzp  
    OP
       2015-09-05 22:56:37 +08:00
    或者 subclass UIControl ,然后在 beginTrackingWithTouch 和 endTrackingWithTouch 中进行背景色改变?
    wanganjun
        3
    wanganjun  
       2015-09-05 22:59:31 +08:00 via iPhone
    感觉别扭可能是因为颜色变化太突然了吧,颜色逐渐变化的话,效果应该回好不少
    hustlzp
        4
    hustlzp  
    OP
       2015-09-05 23:10:00 +08:00
    @wanganjun 效果还好。就是感觉这种代码实现有点别扭。
    wanganjun
        5
    wanganjun  
       2015-09-05 23:32:20 +08:00 via iPhone
    原来咱们说的不是同一个东西
    onevcat
        6
    onevcat  
       2015-09-05 23:42:00 +08:00
    touchesBegan , touchesEnded
    fghfjujiber
        7
    fghfjujiber  
       2015-09-05 23:49:49 +08:00
    用 touchesBegin: / touchesEnded: / touchesCanceled 会不会好些?
    hustlzp
        8
    hustlzp  
    OP
       2015-09-05 23:59:37 +08:00
    @onevcat 谢喵大指点!
    hustlzp
        9
    hustlzp  
    OP
       2015-09-05 23:59:55 +08:00
    @fghfjujiber 已经用上了, THX !
    kobe1941
        10
    kobe1941  
       2015-09-06 11:29:04 +08:00
    比如,短暂点一下背景变为灰色, 0.2 秒后恢复最初颜色,长按时背景变为红色,手指离开颜色恢复。
    但是怎么区分用户是短暂点一下还是长按呢?
    chmlai
        11
    chmlai  
       2015-09-06 11:51:30 +08:00
    Gesture 明显比 touchBegan/Ended 好.
    hustlzp
        12
    hustlzp  
    OP
       2015-09-06 18:04:35 +08:00
    @kobe1941 添加一个 tap gesture 和一个 long press gesture 就可以区分。
    kobe1941
        13
    kobe1941  
       2015-09-07 10:09:37 +08:00
    @hustlzp 额,单纯加手势当然是 OK 的,我试着用 touchBegan 和 touchEnded ,好像不大好做,不好判断手指落在控件上的时间,所以区分是点一下,还是长按比较纠结
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2590 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:23 · PVG 12:23 · LAX 20:23 · JFK 23:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.