美文网首页
可移动的浮动按钮

可移动的浮动按钮

作者: mikey_Jiang | 来源:发表于2017-02-07 16:59 被阅读50次

    摘要:项目过程中需要就自己写了一个,简单移动,靠边站的按钮

    正文

    自定义代码.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;

    @end

    @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{

    //点击执行事件

    }

    相关文章

      网友评论

          本文标题:可移动的浮动按钮

          本文链接:https://www.haomeiwen.com/subject/oqrmittx.html