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)文章
iOS 導(dǎo)航欄無縫圓滑的隱藏 Navigationbar實例代碼
本文通過實例代碼給大家介紹了iOS 導(dǎo)航欄無縫圓滑的隱藏 Navigationbar的效果,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11
iOS之UIWebView無法獲取web標(biāo)題的解決方法
這篇文章主要為大家詳細介紹了iOS之UIWebView無法獲取web標(biāo)題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
深入解析iOS應(yīng)用開發(fā)中對設(shè)計模式中的橋接模式的使用
這篇文章主要介紹了iOS應(yīng)用開發(fā)中對設(shè)計模式中的橋接模式的使用,bridge橋接模式中主張把抽象部分與實現(xiàn)部分分離,需要的朋友可以參考下2016-03-03
iOS開發(fā)中用imageIO漸進加載圖片及獲取exif的方法
這篇文章主要介紹了iOS開發(fā)中中用imageIO漸進加載圖片及獲取exif的方法,代碼演示為傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-09-09

