您的位置:首页 > 产品设计 > UI/UE

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

2016-06-07 10:21 453 查看
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);
}
}];

}


dbe2
//在需要的类中引入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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: