封装一个拖动悬停的按钮

作者: moonCoder | 来源:发表于2018-08-03 16:01 被阅读421次

需求就是在首页有一个按钮,你可以拖动在屏幕上滑动,最终位置是自己靠边悬靠。
上代码:

//
//  KZWSuspensionButton.m
//  kongzhongfinancial
//
//  Created by ouyang on 2018/8/2.
//  Copyright © 2018年 ouy. All rights reserved.
//

#import "KZWSuspensionButton.h"

@implementation KZWSuspensionButton

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];//创建手势
        [self setUserInteractionEnabled:YES];
        [self addGestureRecognizer:pan];
    }
    return self;
}

- (void)handlePan: (UIPanGestureRecognizer *)rec{
    
    CGPoint point = [rec translationInView:[UIApplication sharedApplication].keyWindow];
    
    NSLog(@"%f,%f",point.x,point.y);
    
    rec.view.center = CGPointMake(rec.view.center.x + point.x, rec.view.center.y + point.y);
    
    [rec setTranslation:CGPointZero inView:[UIApplication sharedApplication].keyWindow];
    
    if (rec.state == UIGestureRecognizerStateEnded) {
        if (self.frame.origin.x < SCREEN_WIDTH/2) {
            [self viewMove:rec.view point:CGPointMake(20 , rec.view.center.y + point.y)];
            if (self.frame.origin.y < KZW_StatusBarAndNavigationBarHeight ) {
                [self viewMove:rec.view point:CGPointMake(20 , KZW_StatusBarAndNavigationBarHeight + 20)];
            }
            if (self.frame.origin.y > SCREEN_HEIGHT - KZW_TabbarHeight) {
                [self viewMove:rec.view point:CGPointMake(20 , SCREEN_HEIGHT - KZW_TabbarHeight - 20)];
            }
        }else {
            [self viewMove:rec.view point:CGPointMake(SCREEN_WIDTH - 20 , rec.view.center.y + point.y)];
            if (self.frame.origin.y < KZW_StatusBarAndNavigationBarHeight ) {
                [self viewMove:rec.view point:CGPointMake(SCREEN_WIDTH - 20 , KZW_StatusBarAndNavigationBarHeight + 20)];
            }
            if (self.frame.origin.y > SCREEN_HEIGHT - KZW_TabbarHeight) {
                [self viewMove:rec.view point:CGPointMake(SCREEN_WIDTH - 20 , SCREEN_HEIGHT - KZW_TabbarHeight - 20)];
            }
        }
    }
}

- (void)viewMove:(UIView *)view point:(CGPoint)point {
    [UIView animateWithDuration:0.6
                                   delay:0
                                  options:UIViewAnimationOptionCurveEaseOut
                               animations:^{
                                       view.center = point;
                                   }
                               completion:nil];
}

@end

一个初始化方法,一个手势添加,位置我是直接基于window写的,最后加了一个靠边的移动动画。然后就OK,这样就算封装完了,你有需要的事件处理也可以直接在这写。

相关文章

  • 封装一个拖动悬停的按钮

    需求就是在首页有一个按钮,你可以拖动在屏幕上滑动,最终位置是自己靠边悬靠。上代码: 一个初始化方法,一个手势添加,...

  • Axure 教程 | 中级电子商务网站设计

    01 按钮形状的悬停样式 步骤1:编辑按钮形状->编辑悬停样式 这一步中,将在Header母板中,设置导航按钮的悬...

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

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

  • QQ粘性效果

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

  • ReactDnD单一目标(例子)

    这是最简单的拖放示例。 拖动下面的框并将它们放入垃圾箱。 请注意,它具有正常、活动和悬停状态。 拖动的项目本身会在...

  • UITableViewCell拖动排序

    UITableViewCell拖动排序功能系统本身就有的,不过系统的只能长按一个按钮才能拖动,如何实现整行可以长按...

  • RN-可拖动的悬浮按钮

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

  • 鼠标事件

    ActionChains()类提供了大部分的鼠标操作,点击,右击,双击,拖动,鼠标悬停等 点击:click() 右...

  • 如何快捷的写css来美化你的界面

    一.写基本 系统性的设计你的css 例如:全局字体、按钮基础样式、按钮圆角、按钮悬停样式、各种配色主题样式、单选、...

  • iOS UITableView可以拖动排序的Cell

    效果图 实现 这个拖动效果可分为两种。第一种就是点击编辑按钮以后,按住右边的拖动按钮进行拖动。第二种就是不在编辑状...

网友评论

本文标题:封装一个拖动悬停的按钮

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