Coder Social home page Coder Social logo

zhengwenming / wmdragview Goto Github PK

View Code? Open in Web Editor NEW
900.0 900.0 162.0 19.07 MB

WMDragView致力于让任意View都可以自由悬浮拖曳(可拖动,悬浮按钮),类似于iOS的AssistiveTouch效果,微信浮窗。

License: MIT License

Objective-C 98.54% Ruby 1.46%

wmdragview's People

Contributors

zhengwenming avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wmdragview's Issues

问题:子控件WMDragView拖出父控件UIView后,还原过程中位置偏移问题

BUG触发流程:
1.创建控制控制器的子控件UIView,设置UIView的frame,例如:
UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(10, 40, 300, 100)];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];

2.创建WMDragView *orangeView,使他成为redView的子控件,并在EndDragBlock设置和之前一样的frame, 例如:
WMDragView *orangeView = [[WMDragView alloc] initWithFrame:CGRectMake(130, 30, 40, 40)];
orangeView.backgroundColor = [UIColor orangeColor];
[redView addSubview:orangeView];
orangeView.EndDragBlock = ^(WMDragView *dragView){

    dragView.frame=CGRectMake(130,  30, 40, 40);
    
};

3.当把orangeView拖出redView一段距离后释放手指,orangeView会向中间偏移一段距离才还原.
请问能尽可能修复这样的位移bug吗?

有一点小bug

初始化DragView给的Frame不在freeRect内,或者设置isKeepBounds,加载完成时必须要手动拖一下DragView,才能靠边或者正确显示在freeRect内,所以要重写两个方法,并主动调用一下[self keepBounds];就可以了

  • (void)setFreeRect:(CGRect)freeRect {
    _freeRect = freeRect;
    [self keepBounds];
    }

  • (void)setIsKeepBounds:(BOOL)isKeepBounds {
    _isKeepBounds = isKeepBounds;
    [self keepBounds];
    }

用CGAffineTransformMakeRotation旋转横屏后,平移的问题,可以加这段代码

/**
拖动事件
@param pan 拖动手势
*/
-(void)dragAction:(UIPanGestureRecognizer *)pan{
if(self.dragEnable==NO)return;
switch (pan.state) {
case UIGestureRecognizerStateBegan:{//开始拖动
if (self.beginDragBlock) {
self.beginDragBlock(self);
}
//注意完成移动后,将translation重置为0十分重要。否则translation每次都会叠加
[pan setTranslation:CGPointZero inView:self];
//保存触摸起始点位置
self.startPoint = [pan translationInView:self];
break;
}

    case UIGestureRecognizerStateChanged:{//拖动中
        //计算位移 = 当前位置 - 起始位置
        if (self.duringDragBlock) {
            self.duringDragBlock(self);
        }
        CGPoint point = [pan translationInView:self];
        float dx;
        float dy;
        switch (self.dragDirection) {
            case WMDragDirectionAny:
            {
                if (self.isXuanHeng) {
                    dy = point.x - self.startPoint.x;
                    dx = self.startPoint.y - point.y;
                } else {
                    dx = point.x - self.startPoint.x;
                    dy = point.y - self.startPoint.y;
                }
            }
                break;
            case WMDragDirectionHorizontal:
                dx = point.x - self.startPoint.x;
                dy = 0;
                break;
            case WMDragDirectionVertical:
                dx = 0;
                dy = point.y - self.startPoint.y;
                break;
            default:
                dx = point.x - self.startPoint.x;
                dy = point.y - self.startPoint.y;
                break;
        }
        
        //计算移动后的view中心点
        CGPoint newCenter = CGPointMake(self.center.x + dx, self.center.y + dy);
        //移动view
        self.center = newCenter;
        
        //  注意完成上述移动后,将translation重置为0十分重要。否则translation每次都会叠加
        [pan setTranslation:CGPointZero inView:self];
        break;
    }
        
    case UIGestureRecognizerStateEnded:{//拖动结束
        [self keepBounds];
        if (self.endDragBlock) {
            self.endDragBlock(self);
        }
        break;
    }
    default:
        break;
}

}

错别字

isKeepBounds是不是又自动黏贴边界效果 应该是“isKeepBounds是不是有自动黏贴边界效果”

提一点小问题

老哥,我调试发现WMDragView里面懒加载的imageView和button控件,即使我没有使用它们,它们还是被初始化了。调试发现问题出在layoutSubviews的时候你设置了它们的frame。而WMDragView里面的button的userInteractionEnabled是为NO的,这样就出现了一个问题,当我往WMDragView添加自定义button的时候,自定义button的点击事件就被拦截了。请问这种情况如何解决。

swift 如何使用

swift 如何使用 点击的回调 可不可以加图片 然后再加自定义View

拖动效果问题

WMDragView.gif中红色范围的拖动效果怎么在demo里面没有了?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.