iOS实现一个可以在屏幕中自由移动的按钮

 更新时间:2017年07月04日 17:00:47   作者:大炮打小鸟  
经常在手机上看到可以随意移动的按钮,正巧最近工作遇到了这个需求,索性就写一个,下面这篇文章主要给大家介绍了利用iOS实现一个可以在屏幕中自由移动的按钮的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

本文主要给大家介绍了利用iOS实现一个可以在屏幕中自由移动的按钮的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍。

效果图如下:

其实实现很简单,只需要写.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开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • iOS Xcode创建文件时自动生成的注释方法

    iOS Xcode创建文件时自动生成的注释方法

    下面小编就为大家分享一篇iOS Xcode创建文件时自动生成的注释方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 基于IOS实现带箭头的view

    基于IOS实现带箭头的view

    这篇文章封装了一个比较常用的控件, 带箭头的View, iOS在很多场景下可以使用到带箭头的View,下面一起来学习学习。
    2016-08-08
  • 如何使用IOS实现WIFI传输

    如何使用IOS实现WIFI传输

    这篇文章主要介绍了如何使用IOS实现WIFI传输,对局域网传输和HTTP感兴趣的同学,可以参考下
    2021-04-04
  • iOS中UIView实现不同方向的导角

    iOS中UIView实现不同方向的导角

    这篇文章主要给大家介绍了关于iOS中UIView实现不同方向的导角的相关资料,文中通过示例代码介绍的非常详细,对大家学习或使用iOS具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • iOS客户端本地推送实现代码

    iOS客户端本地推送实现代码

    这篇文章主要介绍了iOS客户端本地推送实现代码,并确定程序中只有一个弹出框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Xcode8以及iOS10适配等常见问题汇总(整理篇)

    Xcode8以及iOS10适配等常见问题汇总(整理篇)

    随着iOS 10的更新以及Xcdoe 8的更新出现了很多问题,今天小编抽时间给大家整理下我遇到的坑特此分享到脚本之家平台,供大家参考
    2016-09-09
  • iOS图片拉伸的多种方式

    iOS图片拉伸的多种方式

    这篇文章主要为大家详细介绍了iOS图片拉伸的多种方式UIImageView整体拉伸和UIImage局部拉伸,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • ios原生二维码扫描与生成的实现教程

    ios原生二维码扫描与生成的实现教程

    这篇文章主要给大家介绍了关于ios原生二维码扫描与生成的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • ios开发一个好看的折线图

    ios开发一个好看的折线图

    本文文章教给大家在IOS开发中制作一个高颜值好看的折线图,用处非常广泛,有兴趣的朋友参考下吧。
    2018-01-01
  • 关于iOS 11不能定位问题的解决方法

    关于iOS 11不能定位问题的解决方法

    最近在开发中遇到一个问题,后来发现是苹果新增一个权限,自己可查,下面这篇文章主要给大家介绍了关于iOS 11不能定位问题的解决方法,文中介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起来一起学习学习吧。
    2017-11-11

最新评论