iOS 通过UIPanGestureRecognizer实现控件悬浮拖拽

本文介绍如何使用UIPanGestureRecognizer为iOS控件添加拖拽手势,实现控件在屏幕内自由拖动但不超出边界的功能。

对控件添加拖拽手势

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[imageView addGestureRecognizer:pan];        //给图片控件添加手势

实现拖拽方法:


- (void)handlePan:(UIPanGestureRecognizer *)sender {
    CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    //返回在横坐标上、纵坐标上拖动了多少像素
    CGPoint point = [sender translationInView:self.view];
    NSLog(@"%f,%f",point.x,point.y);
    
    CGFloat centerX = sender.view.center.x+point.x;
    CGFloat centerY = sender.view.center.y+point.y;
    CGSize viewSize = sender.view.frame.size;
    
    // top
    if (centerY - viewSize.height/2 < 0) {
        centerY = viewSize.height/2;
    }
    // bottom
    if (centerY + viewSize.height/2 > screenHeight) {
        centerY = screenHeight - viewSize.height/2;
    }
    // left
    if (centerX - viewSize.width/2 < 0){
        centerX = viewSize.width/2;
    }
    // right
    if (centerX + viewSize.width/2 > screenWidth){
        centerX = screenWidth - viewSize.width/2;
    }
    sender.view.center = CGPointMake(centerX, centerY);
    //拖动完之后,每次都要用setTranslation:方法置0这样才不至于不受控制般滑动出视图
    [sender setTranslation:CGPointMake(0, 0) inView:self.view];
}

实现控件在屏幕内部拖拽且不脱离屏幕边界。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值