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

其實(shí)實(shí)現(xiàn)很簡(jiǎn)單,只需要寫.m就可以了
示例代碼
#import "CrossBtnVC.h"
@interface CrossBtnVC ()
{
CGPoint beginPoint;
CGFloat rightMargin;
CGFloat leftMargin;
CGFloat topMargin;
CGFloat bottomMargin;
CGMutablePathRef pathRef;
}
@property (nonatomic,strong) UIButton *crossBtn;//聊天移動(dòng)
@end
@implementation CrossBtnVC
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
_crossBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_crossBtn setImage:[UIImage imageNamed:@"移動(dòng)聊天"] 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 - 手勢(shì)
- (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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)各位iOS開發(fā)者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS開發(fā)實(shí)現(xiàn)下載器的基本功能(1)
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)實(shí)現(xiàn)下載器基本功能的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-07-07
詳解Swift 利用Opration和OprationQueue來下載網(wǎng)絡(luò)圖片
這篇文章主要介紹了詳解Swift 利用Opration和OprationQueue來下載網(wǎng)絡(luò)圖片的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
IOS 實(shí)現(xiàn)微信自動(dòng)搶紅包(非越獄IPhone)
這篇文章主要介紹了IOS 實(shí)現(xiàn)微信自動(dòng)搶紅包(非越獄IPhone)的相關(guān)資料,這里對(duì)實(shí)現(xiàn)自動(dòng)搶紅包做一個(gè)詳細(xì)的實(shí)現(xiàn)步驟,需要的朋友可以參考下2016-11-11
iOS NSURLSessionDownloadTask設(shè)置代理文件下載的示例
本篇文章主要介紹了iOS NSURLSessionDownloadTask設(shè)置代理文件下載的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
iOS小數(shù)取整的方法(ceil?floor?round)示例
這篇文章主要為大家介紹了iOS小數(shù)取整的方法(ceil?floor?round)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
iOS swift實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫的方法示例
在平時(shí)的iOS開發(fā)中,我們進(jìn)行界面跳轉(zhuǎn)時(shí)一般都是采用系統(tǒng)默認(rèn)的轉(zhuǎn)場(chǎng)動(dòng)畫,而下面這篇文章主要給大家介紹了關(guān)于iOS利用swift實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫的方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
iOS MRC 下 block 循環(huán)引用問題實(shí)例講解
本文通過文字說明加代碼的形式給大家介紹了iOS MRC 下 block 循環(huán)引用問題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-12-12
iOS 防止按鈕多次點(diǎn)擊造成多次響應(yīng)的方法
這篇文章主要介紹了iOS 防止按鈕多次點(diǎn)擊造成多次響應(yīng)的方法的相關(guān)資料,這里對(duì)多次點(diǎn)擊造成的響應(yīng)提供了解決辦法,需要的朋友可以參考下2016-11-11

