iOS开发——悬浮按钮
项目中需要在创建一个悬浮按钮,自己觉得光创建一个按钮不能滑动有点不太优化,就自己试着做了一个可以随意拖动的悬浮按钮,希望大家能够多多支持。
-(void)viewDidLoad { //创建悬浮按钮 self.editEventsButton=[UIButton buttonWithType:UIButtonTypeCustom]; self.editEventsButton.frame=CGRectMake(0, 0, 60, 60); [self.editEventsButton setBackgroundImage:[UIImage imageNamed:@"问医生"] forState:UIControlStateNormal]; [self.editEventsButton addTarget:self action:@selector(gotoEditEvents) forControlEvents:UIControlEventTouchUpInside]; self.window=[[UIWindow alloc] initWithFrame:CGRectMake(ScreenWidth-55, ScreenHeight-75-CGRectGetHeight(self.chartView.frame), 60, 60)]; self.window.windowLevel=UIWindowLevelAlert+1; self.window.backgroundColor=[UIColor clearColor]; self.window.layer.cornerRadius=20; self.window.layer.masksToBounds=YES; [self.window addSubview:self.editEventsButton]; [self.window makeKeyAndVisible]; //放一个拖动手势,用来改变控件的位置 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(changePostion:)]; [self.editEventsButton addGestureRecognizer:pan]; [self charts]; [self tabarTool]; } //手势事件 -- 改变位置 -(void)changePostion:(UIPanGestureRecognizer *)pan { CGPoint point = [pan translationInView:self.window]; CGFloat width = [UIScreen mainScreen].bounds.size.width; CGFloat height = [UIScreen mainScreen].bounds.size.height; CGRect originalFrame = self.window.frame; if (originalFrame.origin.x >= 0 && originalFrame.origin.x+originalFrame.size.width <= width) { originalFrame.origin.x += point.x; } if (originalFrame.origin.y >= 0 && originalFrame.origin.y+originalFrame.size.height <= height) { originalFrame.origin.y += point.y; } self.window.frame = originalFrame; [pan setTranslation:CGPointZero inView:self.view]; if (pan.state == UIGestureRecognizerStateBegan) { _editEventsButton.enabled = NO; }else if (pan.state == UIGestureRecognizerStateChanged){ } else { CGRect frame = self.window.frame; //记录是否越界 BOOL isOver = NO; if (frame.origin.x < 0) { frame.origin.x = 0; isOver = YES; } else if (frame.origin.x+frame.size.width > width) { frame.origin.x = width - frame.size.width; isOver = YES; } if (frame.origin.y < 0) { frame.origin.y = 0; isOver = YES; } else if (frame.origin.y+frame.size.height > height) { frame.origin.y = height - frame.size.height; isOver = YES; } if (isOver) { [UIView animateWithDuration:0.3 animations:^{ self.window.frame = frame; }]; } _editEventsButton.enabled = YES; } }