当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS实现一个可以在屏幕中自由移动的按钮

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

i5 3230,w508主题,大唐腹黑录

本文主要给大家介绍了利用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 uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网