拖动View"/>
OC 实现手指滑动拖动View
RPReplay_Final1699613924
实现手指滑动拖动View
支持手势移动的控件 支持 Masonry frame 布局 使用富文本 也支持自动高度
核心代码
- (void)handlePanGesture:(UIPanGestureRecognizer *)p {CGPoint panPoint = [p locationInView:self.view];CGPoint currentViewPoint = _dragView.center;if (p.state == UIGestureRecognizerStateBegan) {_originalPoint = panPoint;} else if(p.state == UIGestureRecognizerStateChanged) {CGFloat moveCenterY = panPoint.y - _originalPoint.y;CGFloat moveCenterX = panPoint.x - _originalPoint.x;_moveY += moveCenterY;_moveX += moveCenterX;[self.dragView mas_updateConstraints:^(MASConstraintMaker *make) {make.centerY.mas_equalTo(self.view.mas_centerY).offset(_moveY);make.centerX.mas_equalTo(self.view.mas_centerX).offset(_moveX);}];//使用 frame 的话 这样布局//self.forecastGroupView.center = CGPointMake(currentViewPoint.x + moveCenterX, currentViewPoint.y + moveCenterY);_originalPoint = panPoint;} else if (p.state == UIGestureRecognizerStateEnded|| p.state == UIGestureRecognizerStateCancelled) {CGFloat groupViewHeight = _dragView.frame.size.height;CGFloat groupViewWidth = _dragView.frame.size.width;CGFloat parentViewHeight = self.view.frame.size.height;CGFloat parentViewWidth = self.view.frame.size.width;CGFloat centerY = 0.0;BOOL edit = NO;if (currentViewPoint.y < groupViewHeight/2) {centerY = groupViewHeight/2;_moveY = -(parentViewHeight - groupViewHeight)/2;edit = YES;} else if (currentViewPoint.y > parentViewHeight - groupViewHeight/2) {_moveY = centerY;_moveY = (parentViewHeight - groupViewHeight)/2;edit = YES;} else {centerY = currentViewPoint.y;}CGFloat centerX = 0.0;if (currentViewPoint.x < groupViewWidth/2) {centerX = groupViewWidth/2;_moveX = -(KWidth - groupViewWidth)/2;edit = YES;} else if (currentViewPoint.x > parentViewWidth - groupViewWidth/2) {centerX = parentViewWidth - groupViewWidth/2;_moveX = (KWidth - groupViewWidth)/2;edit = YES;} else {centerX = currentViewPoint.x;}if(edit) {WeakSelf[UIView animateWithDuration:.25 animations:^{//使用 frame 的话 这样布局//self.forecastGroupView.center = CGPointMake(centerX, centerY);[weakSelf.dragView mas_updateConstraints:^(MASConstraintMaker *make) {make.centerY.mas_equalTo(self.view.mas_centerY).offset(self->_moveY);make.centerX.mas_equalTo(self.view.mas_centerX).offset(self->_moveX);}];} completion:^(BOOL finished) {}];}} else {NSLog(@" pan state : %zd", p.state);}
}
连接
UI交互 dome: iOS OC 部分UI交互 dome - Gitee
更多推荐
OC 实现手指滑动拖动View
发布评论