【问题标题】:Changing button location when pressed按下时更改按钮位置
【发布时间】:2011-08-21 17:19:53
【问题描述】:

我有一个按钮,按下时应向下移动 2 个像素,按下结束时应跳回原始位置。我尝试过touchesBegantouchesEnded,但它们不能与按钮一起使用。我还尝试用 IUView 交换按钮并在touchesEnded 中调用按钮的方法,但这给按钮在向下移动之前带来了奇怪的延迟。有什么想法吗?

【问题讨论】:

    标签: objective-c uibutton location


    【解决方案1】:

    您是否尝试过使用 Touch Down 和 Touch Up 事件?尝试在 Touch Down 时移动按钮位置,并在 Touch Up 时将其恢复到初始值(内部和外部)。

    编辑:这是一个代码示例:

    - (IBAction)moveButtonDown:(id)sender
    {
        UIButton *btn = (UIButton *)sender;
        btn.frame = CGRectMake(btn.frame.origin.x, btn.frame.origin.y + 2, btn.frame.size.width, btn.frame.size.height);
    }
    
    - (IBAction)moveButtonUp:(id)sender
    {
        UIButton *btn = (UIButton *)sender;
        btn.frame = CGRectMake(btn.frame.origin.x, btn.frame.origin.y - 2, btn.frame.size.width, btn.frame.size.height);
    }
    

    将 moveButtonDown: 分配给按钮“Touch Down”事件,并将 moveButtonUp: 分配给其“Touch Up Inside”和“Touch Up Outside”事件。至少在这里经过测试和工作;)

    编辑:感谢 fichek,这是一个使用 CGRectOffset 而不是 CGRectMake 的解决方案:

    - (IBAction)moveButtonDown:(id)sender
    {
        UIButton *btn = (UIButton *)sender;
        btn.frame = CGRectOffset(btn.frame, 0, 2);
    }
    
    - (IBAction)moveButtonUp:(id)sender
    {
        UIButton *btn = (UIButton *)sender;
        btn.frame = CGRectOffset(btn.frame, 0, -2);
    }
    

    【讨论】:

    • 我建议使用 CGRectOffset 而不是 CGRectMake ,更短的语法:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多