摘要:项目过程中需要就自己写了一个,简单移动,靠边站的按钮
正文
自定义代码.h
//ZMFloatButton.h
//xinzibao
//
//Createdby mac on 2017/2/7.
//Copyright©2017年jiangzhenmin. All rightsreserved.
//
#defineSCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
#define
SCREEN_WIDTH([UIScreen mainScreen].bounds.size.width)
#import
@classZMFloatButton;
@protocolZMFloatButtonDelegate
@required
-(void)floatTapAction:(ZMFloatButton *)sender;
@interfaceZMFloatButton :UIView
@property(nonatomic, assign) id delegate;
@property
(nonatomic, strong) UIImageView *bannerIV;//浮标的imageview
@property
(nonatomic, assign) BOOL isMoving;//是否可移动
@end
自定义代码.m
//ZMFloatButton.m
//xinzibao
//
//Createdby mac on 2017/2/7.
//Copyright©2017年jiangzhenmin. All rightsreserved.
//
#import"ZMFloatButton.h"
//点击后扩大的大小
#defineSCALESIZE 5
#define__async_main__ dispatch_async(dispatch_get_main_queue()
typedefNS_ENUM (NSUInteger, LocationTag)
{
kLocationTag_top = 1,
kLocationTag_left,
kLocationTag_bottom,
kLocationTag_right
};
@implementationZMFloatButton
{
float
_nLogoWidth;//浮标的宽度
float
_nLogoHeight;//浮标的高度
LocationTag _locationTag;
float
_w; //有效活动宽度
float
_h; //有效活动高度
}
-(id)initWithFrame:(CGRect)frame
{
self =[super initWithFrame:frame];
if(self) {
//Initialization code
_nLogoWidth = frame.size.width;
_nLogoHeight = frame.size.height;
self.isMoving = YES;
self.backgroundColor = [UIColor clearColor];
self.bannerIV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, _nLogoWidth,_nLogoHeight)];
//此处表示正常情况下父视图的有效范围,其他尺寸自行更改
_w =SCREEN_WIDTH;
_h =SCREEN_HEIGHT-49-64;
//_bannerIV.image = [UIImage imageNamed:@"publishAdd"];
_bannerIV.layer.cornerRadius = 23.f;
_bannerIV.layer.masksToBounds = YES;
_bannerIV.backgroundColor = [UIColor orangeColor];
_bannerIV.userInteractionEnabled = YES;
_bannerIV.alpha = 0.8f;
[selfaddSubview:_bannerIV];
_locationTag = kLocationTag_right;
_nLogoWidth = frame.size.width;
_nLogoHeight = frame.size.height;
self.userInteractionEnabled = YES;
UITapGestureRecognizer *publishTap= [[UITapGestureRecognizeralloc]initWithTarget:self action:@selector(tapAction)];
publishTap.delegate = self;
[_bannerIV addGestureRecognizer:publishTap];
}
returnself;
}
-(void)tapAction{
[self.delegate floatTapAction:nil];
}
#pragmamark - UIResponder
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touchesCancelled");
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if(!_isMoving) {
return;
}
[selfcomputeOfLocation:^
{
}];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if(!_isMoving) {
return;
}
UITouch*touch = [touches anyObject];
CGPointmovedPT = [touch locationInView:[self superview]];
if (
movedPT.x - self.frame.size.width/2 < 0.f
||
movedPT.x + self.frame.size.width/2 > _w
||
movedPT.y - self.frame.size.height/2 < 0.f
||
movedPT.y + self.frame.size.height/2 > _h
)
{
return;
}
NSLog(@"横坐标:%.2f",movedPT.x);
NSLog(@"纵坐标:%.2f",movedPT.y);
[selfsetCenter:movedPT];
}
-(void)computeOfLocation:(void(^)())complete
{
float x= self.center.x;
float y= self.center.y;
CGPointm = CGPointZero;
m.x =x;
m.y =y;
//取两边靠近--------------------------
if (x< _w/2)
{
_locationTag = kLocationTag_left;
}else
{
_locationTag = kLocationTag_right;
}
switch(_locationTag)
{
casekLocationTag_top:
m.y = 0+ _bannerIV.frame.size.width/2;
break;
casekLocationTag_left:
m.x = 0+ _bannerIV.frame.size.height/2+12;
break;
casekLocationTag_bottom:
m.y =_h - _bannerIV.frame.size.height/2;
break;
casekLocationTag_right:
m.x =_w - _bannerIV.frame.size.width/2-12;
break;
}
//这个是在旋转是微调浮标出界时
if (m.x> _w - _bannerIV.frame.size.width/2)
m.x =_w - _bannerIV.frame.size.width/2;
if (m.y> _h - _bannerIV.frame.size.height/2)
m.y =_h - _bannerIV.frame.size.height/2;
[UIViewanimateWithDuration:0.1 animations:^
{
[selfsetCenter:m];
}completion:^(BOOL finished)
{
complete();
}];
}
@end
引入控制器
//ViewController.m
//FloatButtonTest
//
//Createdby mac on 2017/2/7.
//Copyright©2017年Mikey. All rightsreserved.
//
#import"ViewController.h"
#import"ZMFloatButton.h"
@interfaceViewController ()
@end
@implementationViewController
-(void)viewDidLoad {
[superviewDidLoad];
self.view.backgroundColor = [UIColor lightTextColor];
ZMFloatButton * floatBtn = [[ZMFloatButton alloc]initWithFrame:CGRectMake(SCREEN_WIDTH-60,SCREEN_HEIGHT-176, 46, 46)];
floatBtn.delegate = self;
//floatBtn.isMoving = NO;
floatBtn.bannerIV.image = [UIImage imageNamed:@"publishAdd"];
[self.view addSubview:floatBtn];
[self.view bringSubviewToFront:floatBtn];
}
#pragmamark -ZMFloatButtonDelegate
-(void)floatTapAction:(ZMFloatButton *)sender{
//点击执行事件
}
网友评论