美文网首页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按钮在屏幕中自由移动

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