美文网首页IOS累之用之技术重塑
IOS按钮在屏幕中自由移动

IOS按钮在屏幕中自由移动

作者: 大炮打小鸟 | 来源:发表于2017-06-28 17:32 被阅读91次
移动的按钮.gif

其实实现很简单,只需要写.m就可以了

#import "CrossBtnVC.h"
@interface CrossBtnVC ()
{
    CGPoint beginPoint;
    CGFloat rightMargin;
    CGFloat leftMargin;
    CGFloat topMargin;
    CGFloat bottomMargin;
    CGMutablePathRef pathRef;
}
@property (nonatomic,strong) UIButton *crossBtn;//聊天移动
@end
@implementation CrossBtnVC
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    _crossBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [_crossBtn setImage:[UIImage imageNamed:@"移动聊天"] forState:UIControlStateNormal];
    _crossBtn.frame = CGRectMake(UI_View_Width-54*UI_Width_Scale, UI_View_Height-103, 40, 40);
    [self.view addSubview:_crossBtn];
    [_crossBtn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
    [_crossBtn addGestureRecognizer:pan];
    
    rightMargin = [UIScreen mainScreen].bounds.size.width-30;
    leftMargin = 30;
    bottomMargin = [UIScreen mainScreen].bounds.size.height-30-50;
    topMargin = 30+64;

    pathRef=CGPathCreateMutable();
    CGPathMoveToPoint(pathRef, NULL, leftMargin, topMargin);
    CGPathAddLineToPoint(pathRef, NULL, rightMargin, topMargin);
    CGPathAddLineToPoint(pathRef, NULL, rightMargin, bottomMargin);
    CGPathAddLineToPoint(pathRef, NULL, leftMargin, bottomMargin);
    CGPathAddLineToPoint(pathRef, NULL, leftMargin, topMargin);
    CGPathCloseSubpath(pathRef);
}

#pragma mark - 事件
- (void)btnAction:(UIButton*)sender{

}
#pragma mark - 手势
- (void)handlePan:(UIPanGestureRecognizer *)pan
{
    if (pan.state == UIGestureRecognizerStateBegan) {
        
        beginPoint = [pan locationInView:self.view];
    }else if (pan.state == UIGestureRecognizerStateChanged){
        
        CGPoint nowPoint = [pan locationInView:self.view];
        
        float offsetX = nowPoint.x - beginPoint.x;
        float offsetY = nowPoint.y - beginPoint.y;
        CGPoint centerPoint = CGPointMake(beginPoint.x + offsetX, beginPoint.y + offsetY);
        
        if (CGPathContainsPoint(pathRef, NULL, centerPoint, NO))
        {
            _crossBtn.center = centerPoint;
        }else{
            if (centerPoint.y>bottomMargin)
            {
                if (centerPoint.x<rightMargin&&centerPoint.x>leftMargin) {
                    _crossBtn.center = CGPointMake(beginPoint.x + offsetX, bottomMargin);
                }
            }
            else if (centerPoint.y<topMargin)
            {
                if (centerPoint.x<rightMargin&&centerPoint.x>leftMargin) {
                    _crossBtn.center = CGPointMake(beginPoint.x + offsetX, topMargin);
                }
            }
            else if (centerPoint.x>rightMargin)
            {
                _crossBtn.center = CGPointMake(rightMargin, beginPoint.y + offsetY);
            }
            else if (centerPoint.x<leftMargin)
            {
                _crossBtn.center = CGPointMake(leftMargin, beginPoint.y + offsetY);
            }
        }
    }else if (pan.state == UIGestureRecognizerStateEnded || pan.state == UIGestureRecognizerStateFailed){
    }
}
@end

相关文章

  • IOS按钮在屏幕中自由移动

    其实实现很简单,只需要写.m就可以了

  • 悬浮按钮

    项目要求:主界面有个悬浮按钮,可以随手指移动而移动,按钮移动停止后按钮回到屏幕边缘。 思路:自定义一个按钮,在 方...

  • 关于iOS屏幕旋转

    在iOS开发中,最常见的屏幕旋转方案: 取消Device Orientation的选择按钮取消选中 在appDel...

  • iOS开发关于基本控件的初始化及使用方法

    在众多移动应⽤用中,能看到各式各样的表格数据 。在iOS中,要实现表格,数据,图片添加,按钮点击等方法的展示,最常...

  • 动态改变按钮位置

    在Relativalayout中写了一排按钮, 需要左右移动位置, 就是将按钮从左边移动到右边, 再移动回去 刚开...

  • AHK的鼠标移动操作

    当我们信手拈来按键帮你来中输入相对坐标,然后点击插入按钮,我们就可以使用鼠标的移动操作了 为了在屏幕上快速得到屏幕...

  • Android通知栏增加快捷开关的技术实现

    我们通常可以在通知栏上看到“飞行模式”、“移动数据”、“屏幕录制”等开关按钮,这些按钮都属于通知栏上的快捷开关,点...

  • 浅谈UITableView在Swift中的应用与实现

    在移动端应用中,很多情况下我们需要频繁与表格、列表这类的UI组件打交道,由于移动端设备的屏幕较小,所以在iOS上组...

  • CSS三大核心-定位

    定位可以让盒子自由的在某个盒子内移动位置或者固定屏幕中的某个位置,并且可以压住其他盒子。或者固定在屏幕中的某个位置...

  • iOS 悬浮按钮

    想要做出悬浮在屏幕上的按钮效果,按钮可以随便移动位置, 其实很简单的,没有想象中的那么难, 其中有两种方法可以做出...

网友评论

    本文标题:IOS按钮在屏幕中自由移动

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