我如何拖动按钮?

And*_*rew 4 iphone cocoa-touch objective-c uibutton

我有一个UIButton,我希望用户能够使用TouchDragInside进行拖动.当用户移动手指时,如何让按钮移动?

sal*_*.dm 13

正如Jamie所说,平移手势识别器可能是最佳选择.代码看起来像下面的内容.

按钮的视图控制器可能会向按钮添加手势识别器(可能在viewDidLoad),如下所示:

    UIPanGestureRecognizer *pangr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    [myButton addGestureRecognizer:pangr];
    [pangr release];
Run Code Online (Sandbox Code Playgroud)

并且,视图控制器将具有以下目标方法来处理手势:

- (void)pan:(UIPanGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateChanged || 
        recognizer.state == UIGestureRecognizerStateEnded) {

        UIView *draggedButton = recognizer.view;
        CGPoint translation = [recognizer translationInView:self.view];

        CGRect newButtonFrame = draggedButton.frame;
        newButtonFrame.origin.x += translation.x;
        newButtonFrame.origin.y += translation.y;
        draggedButton.frame = newButtonFrame;

        [recognizer setTranslation:CGPointZero inView:self.view];
    }
}
Run Code Online (Sandbox Code Playgroud)

根据rohan-patel的评论进行了修正.

在之前发布的代码中,直接设置了按钮框架原点的x和y坐标.这是不正确的:draggedButton.frame.origin.x += translation.x.可以更改视图的框架,但不能直接更改框架的组件.


Jam*_*mie 6

您可能不想使用TouchDragInside.这是一种识别按钮或其他控件已经以某种方式被激活的方法.要移动按钮,您可能希望使用UIPanGestureRecognizer,然后在用户手指移动时更改其超级视图中的按钮位置.