类似AssistiveTouch可移动UIButton(UITouch用法)

Button可随着手指移动,松开后根据位置判断自动依附在左右侧

//
//  MoveButton.h
//
#import <UIKit/UIKit.h>

@interface MoveButton : UIButton
{
    CGPoint beginPoint;
}
@property (nonatomic) BOOL dragEnable;
@end
//
//  MoveButton.m
//
#import "MoveButton.h"

@implementation MoveButton

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
    }
    return self;
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    if (!_dragEnable) {
        return;
    }
    UITouch *touch = [touches anyObject];
    beginPoint = [touch locationInView:self];
}

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    if (!_dragEnable) {
        return;
    }
    UITouch *touch = [touches anyObject];
    CGPoint nowPoint = [touch locationInView:self];

    float offsetX = nowPoint.x - beginPoint.x;
    float offsetY = nowPoint.y - beginPoint.y;

    self.center = CGPointMake(self.center.x + offsetX, self.center.y + offsetY);

    if (self.center.y < self.frame.size.height/2)
    {
        self.center = CGPointMake(self.center.x, self.frame.size.height/2) ;
    }else if(self.center.y > SCREEN_HEIGHT -  self.frame.size.height/2)
    {
        self.center = CGPointMake(self.center.x, SCREEN_HEIGHT - self.frame.size.height/2);
    }

}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{

    CGRect rect = self.frame;
    [UIView animateWithDuration:0.5 animations:^{
        if (self.center.x <= SCREEN_WIDTH/2) {
            self.center = CGPointMake(rect.size.width/2,self.center.y );
        }else
        {
            self.center = CGPointMake(SCREEN_WIDTH -  rect.size.width/2,self.center.y);
        }
}];

}
//在需要的类中引入MoveButton
MoveButton *testButton =[[MoveButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH-66*UIRate, 260*UIRate+64,  70.5*UIRate, 48*UIRate)];
    testButton.dragEnable = YES;
    [testButton setBackgroundImage:[UIImage imageNamed:@"security"] forState:UIControlStateNormal];
    [testButton addTarget:self action:@selector(forwardToSafe) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:testButton];

    //添加完后,UIButton有肯能无法点击,加上单指点击事件即可
    UITapGestureRecognizer *aTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(forwardToSafe)];
    aTap.numberOfTapsRequired = 1;
    [testButton addGestureRecognizer:aTap];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值