美文网首页转载动画与绘图iOS Developer
FJFloatingView 可停靠任意位置悬浮窗

FJFloatingView 可停靠任意位置悬浮窗

作者: 林大鹏 | 来源:发表于2016-09-12 16:01 被阅读241次

由于项目需求,需要一个悬浮窗口,随手势移动,可以停靠在任意位置,所以自己整了一个,简单封装一下,希望能帮到有需要的朋友。

一.效果图

FJFloatingView效果图.gif

二.使用方法

FJFloatingView *floatingView = [[FJFloatingView alloc] initWithFrame:CGRectMake(100, 100, FJ_FLOATING_VOICE_VIEW_SIZE, FJ_FLOATING_VOICE_VIEW_SIZE)];
[self.view addSubview:floatingView];

四.主要代码分析:

滑动范围四个值:

// 上边距(默认值:0)
@property (nonatomic, assign) CGFloat upEdgeDistance;
// 右边距(右边距:SCREEN_WIDTH)
@property (nonatomic, assign) CGFloat downEdgeDistance;
// 左边距(默认值:0)
@property (nonatomic, assign) CGFloat leftEdgeDistance;
// 下边距(默认值:SCREEN_HEIGHT)
@property (nonatomic, assign) CGFloat rightEdgeDistance;

这四个值主要是有利于需求的扩展,比如需求规定不能超过状态栏,只需将上边距设为20即可。

手势滑动处理函数,限定floatingView在规定的范围滑动:

#pragma mark --- response event

-(void)pan:(UIPanGestureRecognizer *)sender {
    switch (sender.state) {
        case UIGestureRecognizerStateBegan:
        {
            _beganPoint = [sender locationInView:self.superview];
            _curPoint = self.center;
        }
            break;
        case UIGestureRecognizerStateChanged:
        {
            CGPoint point = [sender locationInView:self.superview];
        
            NSInteger x_offset = point.x - _beganPoint.x;
            NSInteger y_offset = point.y - _beganPoint.y;
            self.tmpView.center = self.center;
            self.tmpView.center = CGPointMake(_curPoint.x + x_offset, _curPoint.y + y_offset);
            // 设置 左边距
            if (CGRectGetMinX(self.tmpView.frame) < self.leftEdgeDistance){
                x_offset -= CGRectGetMinX(self.tmpView.frame);
            }
            // 设置 右边距
            if (CGRectGetMaxX(self.tmpView.frame) > self.rightEdgeDistance) {
                x_offset += SCREEN_WIDTH - CGRectGetMaxX(self.tmpView.frame);
            }
            // 设置 上边距
            if (CGRectGetMinY(self.tmpView.frame) < self.upEdgeDistance) {
                y_offset -= CGRectGetMinY(self.tmpView.frame);
            }
            // 设置 下边距
            if (CGRectGetMaxY(self.tmpView.frame) > self.downEdgeDistance) {
                y_offset += self.downEdgeDistance - CGRectGetMaxY(self.tmpView.frame);
            }
            self.center = CGPointMake(_curPoint.x + x_offset, _curPoint.y + y_offset);
        }
            break;
        
        case UIGestureRecognizerStateEnded:
            break;
        default:
            break;
    }
}

四.最后:

送上一张喜欢的图片:

青春.jpg

这是gitHub链接地址,大家有兴趣可以看一下,如果觉得不错,麻烦给个喜欢或star,如果有问题请及时反馈,谢谢!

相关文章

  • FJFloatingView 可停靠任意位置悬浮窗

    由于项目需求,需要一个悬浮窗口,随手势移动,可以停靠在任意位置,所以自己整了一个,简单封装一下,希望能帮到有需要的...

  • 感兴趣的资源收集

    三方库 Andorid 任意界面悬浮窗,实现悬浮窗Customize the LayoutManager of R...

  • autojs悬浮窗点击穿透

    牙叔教程 简单易懂 使用场景 想让悬浮窗可以调整大小, 位置, 又想设置悬浮窗是否可触摸 autojs版本 8.8...

  • 悬浮提词器介绍

    苹果手机上的悬浮提词器 口播演讲神器 悬浮提词器是可以悬浮在任意App上方的提词器工具! 可悬浮在各大直播APP和...

  • 图的鼠标悬浮窗位置

    通过tooltip里面的position属性设置默认不设置时位置会根据鼠标的位置变化1、Array:通过数组表示提...

  • iOS仿微信悬浮窗

    仿微信悬浮窗,可直接协议加入悬浮窗或者直接调用方法注册,可自定义转场动画 Github地址(WMZFloatVie...

  • android 悬浮窗

    安卓悬浮窗的书写,我们分为几个步骤: 1.添加悬浮窗权限 2.书写悬浮窗代码,搭建悬浮窗布局 3.判断悬浮窗权限是...

  • 悬浮框

    使用悬浮框 悬浮窗监听器 悬浮窗管理器

  • Android 可拖动悬浮窗实现

    最近公司的项目里,需要通过悬浮窗进行控制,悬浮窗根据手势进行拖动。当时同事给的建议用 ViewDragHelper...

  • Android悬浮窗探究

    需求:学习悬浮窗使用以及type参数影响 悬浮窗使用 在获得系统悬浮窗权限(SYSTEM_ALERT_WINDOW...

网友评论

  • 半碗大米汤:Git 代码中,手势的分类扩展引用没有删掉,会报错。。
    林大鹏:谢谢啊!我自己太粗心,上传了没自己下下来运行看下!

本文标题:FJFloatingView 可停靠任意位置悬浮窗

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