UIButton PanGesture 走出屏幕

z22*_*z22 0 uigesturerecognizer ios

我已经构建了一个小型测试应用程序来在 UIButton 上应用平移手势。我成功应用了平移手势并成功移动了按钮。但问题是我什至可以在屏幕外移动按钮。如何将其绑定为仅在 iPhone 屏幕内移动?这是我的代码:

    - (void)viewDidLoad
{
    [super viewDidLoad];

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    [panGesture setMinimumNumberOfTouches:1];
    [_shareButton addGestureRecognizer:panGesture];
}

-(IBAction)pan:(UIPanGestureRecognizer *)recognizer
{
    CGPoint trans =[recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x+trans.x, recognizer.view.center.y+trans.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];


}
Run Code Online (Sandbox Code Playgroud)

如何限制按钮移出屏幕?我使用的是 iOS 7,xcode 5.0。

Sou*_*sam 5

这对你有用..但我用Swift写的:

func callMe(sender: UIPanGestureRecognizer)
{
    let translation = sender.translationInView(self.view)

    let newX = sender.view!.center.x + translation.x
    let newY = sender.view!.center.y + translation.y
    let senderWidth = sender.view!.bounds.width / 2
    let senderHight = sender.view!.bounds.height / 2

    if newX <= senderWidth
    {
        sender.view!.center = CGPoint(x: senderWidth, y: sender.view!.center.y + translation.y)
    }
    else if newX >= self.view.bounds.maxX - senderWidth
    {
        sender.view!.center = CGPoint(x: self.view.bounds.maxX - senderWidth, y: sender.view!.center.y + translation.y)
    }
    if newY <= senderHight
    {
        sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: senderHight)
    }
    else if newY >= self.view.bounds.maxY - senderHight
    {
        sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: self.view.bounds.maxY - senderHight)
    }
    else
    {
        sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y)
    }

    sender.setTranslation(CGPointZero, inView: self.view)
}
Run Code Online (Sandbox Code Playgroud)

我希望它可以帮助任何正在寻找最简单方法的人。