首页 > 系统 > iOS > 正文

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

2020-07-26 02:46:06
字体:
来源:转载
供稿:网友

本文主要给大家介绍了利用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开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对武林网的支持。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表