【发布时间】:2011-08-21 17:19:53
【问题描述】:
我有一个按钮,按下时应向下移动 2 个像素,按下结束时应跳回原始位置。我尝试过touchesBegan 和touchesEnded,但它们不能与按钮一起使用。我还尝试用 IUView 交换按钮并在touchesEnded 中调用按钮的方法,但这给按钮在向下移动之前带来了奇怪的延迟。有什么想法吗?
【问题讨论】:
标签: objective-c uibutton location
我有一个按钮,按下时应向下移动 2 个像素,按下结束时应跳回原始位置。我尝试过touchesBegan 和touchesEnded,但它们不能与按钮一起使用。我还尝试用 IUView 交换按钮并在touchesEnded 中调用按钮的方法,但这给按钮在向下移动之前带来了奇怪的延迟。有什么想法吗?
【问题讨论】:
标签: objective-c uibutton location
您是否尝试过使用 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);
}
【讨论】: