iOS实现一个可以在屏幕中自由移动的按钮
发布时间 - 2026-01-11 02:10:55 点击率:次本文主要给大家介绍了利用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&¢erPoint.x>leftMargin) {
_crossBtn.center = CGPointMake(beginPoint.x + offsetX, bottomMargin);
}
}
else if (centerPoint.y<topMargin)
{
if (centerPoint.x<rightMargin&¢erPoint.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
# 可以移动悬浮按钮
# 可移动的按钮
# 按钮移动动画
# iOS粒子路径移动效果 iOS实现QQ拖动效果
# ios实现简单随便移动的AR功能
# 相关内容
# 只需
# 给大家
# 很简单
# 这篇文章
# 谢谢大家
# 多说
# 要写
# 就可以
# 有疑问
# crossBtn
# UIButton
# implementation
# property
# void
# CGMutablePathRef
# bottomMargin
# topMargin
# nonatomic
# leftMargin
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何快速搭建FTP站点实现文件共享?
QQ浏览器网页版登录入口 个人中心在线进入
微信h5制作网站有哪些,免费微信H5页面制作工具?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
如何用已有域名快速搭建网站?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
中山网站制作网页,中山新生登记系统登记流程?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
使用spring连接及操作mongodb3.0实例
如何获取免费开源的自助建站系统源码?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
太平洋网站制作公司,网络用语太平洋是什么意思?
如何在宝塔面板中创建新站点?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
iOS验证手机号的正则表达式
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何在阿里云服务器自主搭建网站?
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
网易LOFTER官网链接 老福特网页版登录地址
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
长沙做网站要多少钱,长沙国安网络怎么样?
Python3.6正式版新特性预览
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
高防服务器租用指南:配置选择与快速部署攻略
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel怎么实现验证码(Captcha)功能
Python高阶函数应用_函数作为参数说明【指导】
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
高防服务器租用如何选择配置与防御等级?
Laravel模型事件有哪些_Laravel Model Event生命周期详解

