iOS实现悬浮按钮

前言

开发中会遇到有悬浮按钮功能。

效果

上代码

SuspensionButton.h

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface SuspensionButton : UIButton

@property(nonatomic, assign)BOOL MoveEnable;
@property(nonatomic, assign)BOOL MoveEnabled;
@property(nonatomic, assign)CGPoint beginpoint;

@end

NS_ASSUME_NONNULL_END

SuspensionButton.m

#import "SuspensionButton.h"

@implementation SuspensionButton

- (instancetype)initWithFrame:(CGRect)frame {
 if (self = [super initWithFrame:frame]) {
 self.frame = CGRectMake([[UIScreen mainScreen] bounds].size.width - 51, 50, 51, 51);
 [self setBackgroundImage:[UIImage imageNamed:@"icon_move"] forState:UIControlStateNormal];
 [self setTitle:@"Button" forState:UIControlStateNormal];
 self.titleLabel.font = [UIFont systemFontOfSize:10];
 [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
 _MoveEnable = YES;
 }
 return self;
}

//开始触摸的方法
//触摸-清扫
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 _MoveEnabled = NO;
 [super touchesBegan:touches withEvent:event];
 if (!_MoveEnable) {
 return;
 }
 UITouch *touch = [touches anyObject];
 _beginpoint = [touch locationInView:self];
}

//触摸移动的方法
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
 _MoveEnabled = YES;//单击事件可用
 if (!_MoveEnable) {
 return;
 }
 UITouch *touch = [touches anyObject];
 CGPoint currentPosition = [touch locationInView:self];
 //偏移量
 float offsetX = currentPosition.x - _beginpoint.x;
 float offsetY = currentPosition.y - _beginpoint.y;
 //移动后的中心坐标
 self.center = CGPointMake(self.center.x + offsetX, self.center.y + offsetY);

 //x轴左右极限坐标
 if (self.center.x > (self.superview.frame.size.width - self.frame.size.width / 2)) {
 CGFloat x = self.superview.frame.size.width - self.frame.size.width / 2;
 self.center = CGPointMake(x, self.center.y + offsetY);
 } else if (self.center.x < self.frame.size.width / 2) {
 CGFloat x = self.frame.size.width / 2;
 self.center = CGPointMake(x, self.center.y + offsetY);
 }

 //y轴上下极限坐标
 if (self.center.y > (self.superview.frame.size.height - self.frame.size.height)) {
 CGFloat x = self.center.x;
 CGFloat y = self.superview.frame.size.height - self.frame.size.height * 1.5;
 self.center = CGPointMake(x, y);
 } else if (self.center.y <= self.frame.size.height) {
 CGFloat x = self.center.x;
 CGFloat y = self.frame.size.height * 1.2;
 self.center = CGPointMake(x, y);
 }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 if (!_MoveEnable) {
 return;
 }

 if (self.center.x >= self.superview.frame.size.width / 2) {//向右侧移动
 //偏移动画
 [UIView beginAnimations:@"move" context:nil];
 [UIView setAnimationDuration:1];
 [UIView setAnimationDelegate:self];
 self.frame = CGRectMake(self.superview.frame.size.width - 51, self.center.y - 25.5, 51, 51);
 //提交UIView动画
 [UIView commitAnimations];
 } else {//向左侧移动

 [UIView beginAnimations:@"move" context:nil];
 [UIView setAnimationDuration:1];
 [UIView setAnimationDelegate:self];
 self.frame=CGRectMake(0.f,self.center.y - 25.5, 51, 51);
 //提交UIView动画
 [UIView commitAnimations];
 }

 //不加此句话,UIButton将一直处于按下状态
 [super touchesEnded: touches withEvent: event];

}
@end

使用

ViewController.m

#import "ViewController.h"
#import "SuspensionButton.h"//悬浮按钮

@interface ViewController ()

@property(nonatomic, strong) SuspensionButton *suspensionButton;

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 [self.view addSubview:self.suspensionButton];
}

- (SuspensionButton *)suspensionButton {
 if(_suspensionButton == nil) {
 _suspensionButton = [SuspensionButton buttonWithType:UIButtonTypeCustom];
 _suspensionButton.backgroundColor = [UIColor grayColor];
 _suspensionButton.layer.masksToBounds = YES;
 _suspensionButton.layer.cornerRadius = self.suspensionButton.frame.size.width/2;
 [_suspensionButton addTarget:self action:@selector(suspensionButtonClick) forControlEvents:UIControlEventTouchUpInside];
 }
 return _suspensionButton;
}

- (void)suspensionButtonClick {

}

@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解iOS-按钮单选与多选逻辑处理

    我们经常会有多行多列按钮的页面, 这个时候我们通常会选择循环创建按钮, 然后进行按钮单选或者多选的操作! 一. 单选逻辑处理 1. 创建按钮控件数组及标签数组, 并升级当前选中按钮为属性,方便使用 #define ZLUnselectedColor [UIColor colorWithRed:(241)/255.0 green:(242)/255.0 blue:(243)/255.0 alpha:1.0] #define ZLSelectedColor [UIColor colorWithRed

  • iOS开发中UISwitch按钮的使用方法简介

    一.第一种创建UISwitch控件的方法,在代码中动态创建. 1.打开Xcode  4.3.2, 新建项目Switch,选择Single View Application. 2.打开ViewController.m文件在viewDidLoad方法里添加代码: 复制代码 代码如下: - (void)viewDidLoad {     [super viewDidLoad];     UISwitch *switchButton = [[UISwitch alloc] initWithFrame:C

  • iOS App中UITableView左滑出现删除按钮及其cell的重用

    UITableView的编辑模式 实现UITableView简单的删除功能(左滑出现删除按钮) 首先UITableView需要进入编辑模式.实现下面的方法,即使什么代码也不写也会进入编辑模式: 复制代码 代码如下: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)index

  • IOS 开发之自定义按钮实现文字图片位置随意定制

    IOS 开发之自定义按钮实现文字图片位置随意定制 可能有些看到这篇文章的朋友会觉得很不屑:"按钮谁不会自定义?还需要看你的?" 也确实,按钮是我们项目中最常见的控件之一,天天在使用.对于不同类型的按钮,我们是否有更加简便的方法来实现需求是我们需要做的.这里我提出自己的两种方法,您可以对你自己平时自定义按钮的方法做一下对比,看看哪种方法更加简单. 多说一句,千万不要觉得知识简单,觉得自己会了,没必要学习.'往往简单的东西存在大智慧'(这个比给满分),知识都是慢慢积累出来的. 按钮是应用中

  • IOS UITableViewCell详解及按钮点击事件处理实例

    IOS UITableViewCell详解及按钮点击事件处理 今天突然做项目的时候,又遇到处理自定义的UITableViewCell上按钮的点击事件问题.我知道有两种方式,可是突然想不起来之前是怎么做的了,好记性不如烂笔头,还是记录一下吧. 1.第一种方式给Button加上tag值 这里分为两种:一种是直接在原生的UITableViewCell上添加UIButton按钮,然后给UIButton设置tag值,然后在控制器里的方法里通过取数据,做界面跳转等.还是举个例子吧,省的回忆半天. - (UI

  • 学习iOS开关按钮UISwitch控件

    开关按钮UISwitch 在ViewController.h里面 #import <UIKit/UIKit.h> @interface ViewController : UIViewController{ //定义一个开关控件 //作用可以进行状态的改变 //开,关:两种状态可以切换 //所有UIKit框架库中的控件均已UI开头 //苹果官方的控件都定义在UIKit框架库中 UISwitch * _mySwitch; } @property(retain,nonatomic) UISwitch

  • iOS应用开发中导航栏按钮UIBarButtonItem的添加教程

    1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在对象管理上,导航控制器使用了导航堆栈.根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock

  • 详解iOS中Button按钮的状态和点击事件

    一.按钮的状态 1.UIControlStateNormal 1> 除开UIControlStateHighlighted.UIControlStateDisabled.UIControlStateSelected以外的其他情况,都是normal状态 2> 这种状态下的按钮[可以]接收点击事件 2.UIControlStateHighlighted 1> [当按住按钮不松开]或者[highlighted = YES]时就能达到这种状态 2> 这种状态下的按钮[可以]接收点击事件 3

  • 详解iOS应用中自定义UIBarButtonItem导航按钮的创建方法

    iOS系统导航栏中有leftBarButtonItem和rightBarButtonItem,我们可以根据自己的需求来自定义这两个UIBarButtonItem. 四种创建方法 系统提供了四种创建的方法: 复制代码 代码如下: - (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(id)target action:(SEL)action; - (instancetype)init

  • 关于iOS导航栏返回按钮问题的解决方法

    最近遇到一个关于导航栏返回按钮的问题,因为之前项目里面都是用的系统默认的返回按钮样式所以没有想过要去更改,后来有需要将返回按钮箭头旁边的文字去掉,同时将该返回按钮的点击事件重新定义.一开始尝试自定义按钮然后设置为leftBarButtonItem,但是这样图片可能跟系统自带的不一样,还有就是返回按钮的位置跟系统自带的不一样.后来找了一些资料,发现将文字去掉比较简单,一般做法是控制器中添加如下代码,然后他的下一级控制就有一个只有箭头没有文字返回按钮: 复制代码 代码如下: UIBarButtonI

随机推荐