首页 > 代码库 > iOS 自由拖动的滑块
iOS 自由拖动的滑块
完全自由拖动的滑块
floatViewExample
代码实现:
@implementation FloatView #pragma mark - lazyload - (UIImageView *)imageView { if (_imageView == nil) { _imageView = [[UIImageView alloc]init]; _imageView.image = [UIImage imageNamed:@"telephone"]; _imageView.frame = self.bounds; } return _imageView; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; //CGPoint pt = [touch locationInView:self.superview]; CGRect frame = self.frame; //在自身视图中的位置 CGPoint pt = [touch locationInView:self]; CGPoint anchorPoint = CGPointMake(pt.x/self.bounds.size.width, pt.y/self.bounds.size.height); //这是设置的是position也就是center的位置百分比 //也就是鼠标所在的位置 self.layer.anchorPoint = anchorPoint; self.frame = frame; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint pt = [touch locationInView:self.superview]; self.layer.position = pt; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self limitRangeOfView]; } - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self limitRangeOfView]; } - (void)limitRangeOfView { [UIView animateWithDuration:0.3 animations:^{ CGFloat padding = 1; CGRect frame = self.frame; if (frame.origin.x < padding) { frame.origin.x = padding; } if (frame.origin.y < padding) { frame.origin.y = padding; } if (frame.origin.x > (kScreenWidth-frame.size.height-padding)) { frame.origin.x = kScreenWidth-frame.size.width-padding; } if (frame.origin.y > (kScreenHeight-frame.size.height-padding)) { frame.origin.y = kScreenHeight-frame.size.height-padding; } self.frame = frame; }]; } @end
github 地址:floatViewExample
iOS 自由拖动的滑块
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。