iOS實現(xiàn)一個可以在屏幕中自由移動的按鈕
本文主要給大家介紹了利用iOS實現(xiàn)一個可以在屏幕中自由移動的按鈕的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說,來一起看看詳細的介紹。
效果圖如下:

其實實現(xiàn)很簡單,只需要寫.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
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對各位iOS開發(fā)者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
詳解Swift 利用Opration和OprationQueue來下載網(wǎng)絡(luò)圖片
這篇文章主要介紹了詳解Swift 利用Opration和OprationQueue來下載網(wǎng)絡(luò)圖片的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
IOS 實現(xiàn)微信自動搶紅包(非越獄IPhone)
這篇文章主要介紹了IOS 實現(xiàn)微信自動搶紅包(非越獄IPhone)的相關(guān)資料,這里對實現(xiàn)自動搶紅包做一個詳細的實現(xiàn)步驟,需要的朋友可以參考下2016-11-11
iOS NSURLSessionDownloadTask設(shè)置代理文件下載的示例
本篇文章主要介紹了iOS NSURLSessionDownloadTask設(shè)置代理文件下載的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
iOS小數(shù)取整的方法(ceil?floor?round)示例
這篇文章主要為大家介紹了iOS小數(shù)取整的方法(ceil?floor?round)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
iOS swift實現(xiàn)轉(zhuǎn)場動畫的方法示例
在平時的iOS開發(fā)中,我們進行界面跳轉(zhuǎn)時一般都是采用系統(tǒng)默認的轉(zhuǎn)場動畫,而下面這篇文章主要給大家介紹了關(guān)于iOS利用swift實現(xiàn)轉(zhuǎn)場動畫的方法示例,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
iOS MRC 下 block 循環(huán)引用問題實例講解
本文通過文字說明加代碼的形式給大家介紹了iOS MRC 下 block 循環(huán)引用問題,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-12-12

