美文网首页ios-UI
iOS开发 按钮拖动

iOS开发 按钮拖动

作者: 双子座的小小杂货铺 | 来源:发表于2016-11-22 17:53 被阅读1488次

产品需求要实现这个功能,查资料才发现原来这么简单啊

第一版:添加并实现方法

//点击方法
[_grabBtn addTarget:self action:@selector(onClick) forControlEvents:UIControlEventTouchUpInside];
//拖动
[_grabBtn addTarget:self action:@selector(dragMoving:withEvent: )forControlEvents: UIControlEventTouchDragInside];
//拖动结束
[_grabBtn addTarget:self action:@selector(dragEnded:withEvent: )forControlEvents: UIControlEventTouchUpInside | UIControlEventTouchUpOutside];

//实现方法
- (void) dragMoving: (UIControl *)c withEvent:event{
    c.center = [[[event allTouches] anyObject] locationInView:self.view];
}
- (void) dragEnded: (UIControl *)c withEvent:event
{
    c.center = [[[event allTouches] anyObject] locationInView:self.view];
}

第一版基本就实现了拖动功能,然而并不仅仅是实现功能就可以了,有时候我们还要考虑代码的优化,例如按钮的位置不能超出屏幕范围,于是就有了第二版

第二版

//抢单按钮拖动
- (void) dragMoving: (UIControl *)c withEvent:event
{
    CGPoint center = [[[event allTouches] anyObject] locationInView:self.view];
    //不能超出范围
    if (center.x - c.width/ 2 >= 0 && center.x + c.width/ 2 <= kSCREEN_WIDTH && center.y -c.height / 2 >= 0 && center.y + c.height < self.view.height - 10) {
        c.center = center;
    }
    self.isDrag = YES;
}

在测试的时候我们会发现这样还有一个问题,在拖动结束后,他还会触发点击事件,然而这时候我们只想拖动,并不想让他出发点击事件,解决这个问题有两种方法

  1. 在拖动时设置个拖动状态标记变量,在按钮点击事件中检测这个变量。
  2. 将按钮嵌入到另外一个View中,这个View用来响应拖动;而按钮还是响应点击。

第三版

我采用的是第一种方法

@property (nonatomic) BOOL isDrag;  //抢单按钮是否处于拖动状态

//抢单按钮拖动
- (void) dragMoving: (UIControl *)c withEvent:event
{
    CGPoint center = [[[event allTouches] anyObject] locationInView:self.view];
    //不能超出范围
    if (center.x - c.width/ 2 >= 0 && center.x + c.width/ 2 <= kSCREEN_WIDTH && center.y -c.height / 2 >= 0 && center.y + c.height < self.view.height - 10) {
        c.center = center;
    }
    self.isDrag = YES;
}
- (void) dragEnded: (UIControl *)c withEvent:event
{
    c.center = [[[event allTouches] anyObject] locationInView:self.view];
    _btnCenter = c.center; //在这里我用了一个变量存放最后的位置,当viewDidLayoutSubviews方法里使按钮保持在用户最后选定的位置
    self.isDrag = NO;
}
//在点击方法里做一下判断
- (void)onGrabAction
{
    if (self.isDrag) {
        return;
    }
    //点击方法
}

相关文章

  • iOS开发 按钮拖动

    产品需求要实现这个功能,查资料才发现原来这么简单啊 第一版:添加并实现方法 第一版基本就实现了拖动功能,然而并不仅...

  • iOS开发之控件封装(又名拧螺丝):排序按钮

    iOS开发之控件封装(又名拧螺丝):排序按钮 iOS开发之控件封装(又名拧螺丝):排序按钮

  • iOS悬浮异形按钮实现

    我们在开发中有时候根据业务的需要,有时候需要一个在界面上常驻按钮,或者悬浮按钮,且可拖动,可点击,该类按钮主要起到...

  • 按钮

    iOS开发禁用多个按钮同时点击导致误触

  • Android仿IOS悬浮拖动按钮

    开发是我们有时候需要一些快捷通道,类似ios系统的拖动方块。Android6.0及其以上版本手机使用悬浮窗功能会正...

  • QQ粘性效果

    效果:拖动信息提示数目按钮,感觉像是在拉伸按钮,当拖动到一定范围,按钮(小圆被抽出),松开手小圆会爆炸。如果抽出小...

  • iOS手势-UIPanGestureRecognizer

    UIPanGestureRecognizer是iOS开发中不怎么常用的一个拖动手势. 打开UIPanGesture...

  • 解决自定义可拖动View在软键盘弹出和隐藏时位置重置问题

    问题发生背景如下图: 需要实现一个可拖动且可点击的按钮 当拖动后按钮的坐标需要存到缓存中,下次进入将按钮设置到指定...

  • ios按钮重复点击那点事

    在ios开发中,按钮是最常用的控件之一了,用于人机交互,实际开发中我们用到按钮的次数也会很多,不过按钮也是有弊端的...

  • RN-可拖动的悬浮按钮

    RN-可拖动的悬浮按钮 需求 分享悬浮按钮,需要展示在特定页面,并且支持拖动(防止遮挡页面内容) 解决方案思路 1...

网友评论

    本文标题:iOS开发 按钮拖动

    本文链接:https://www.haomeiwen.com/subject/nifmpttx.html