使用UIPanGestureRecognizer实现类似于微信剪切里边的矩形框

第一步先声明一个拖拽手势:

UIPanGestureRecognizer *imgPan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(imgPangestureMethod:)];

[self.contenImg addGestureRecognizer:imgPan];

    imgPan.delegate=self;

-(void)imgPangestureMethod:(UIPanGestureRecognizer *)pan{   

CGPoint translation = [pan translationInView:self.contenImg];   

CGPoint local = [pan locationInView:self.contenImg];   

NSLog(@"%fqqq---qqq%f",local.x,local.y);   

CGPoint beginPoint = CGPointMake(0, 0);   

if (pan.state==UIGestureRecognizerStateBegan) {       

beginPoint = local;       

self.pyOperateViewDrawRedFrameBegin_block(local);   

}else if(pan.state==UIGestureRecognizerStateChanged){        self.pyOperateViewDrawRedFrame_block(CGSizeMake(translation.x, translation.y),local);    }else if(pan.state==UIGestureRecognizerStateEnded){        self.PYOperateViewDrawRedFrameEnd_block();   

}   

[pan setTranslation:CGPointZero inView:self.contenImg];    

}

第二步使用view来实现画红色矩形框:

//画红框 

  __block NSMutableArray * redFramViewArr = [NSMutableArray array];    self.pyOperateView.pyOperateViewDrawRedFrameBegin_block = ^(CGPoint beginPoint) {//开始画        

@strongify(self)        

JBY_RedFrameView *redFrameView = [[JBY_RedFrameView alloc] initWithFrame:CGRectMake(beginPoint.x, beginPoint.y, 0, 0 )];       

redFrameView.beginPoint = beginPoint;       

[redFramViewArr addObject:redFrameView];       

[self.pyOperateView.contenImg addSubview:redFrameView];   

};    

self.pyOperateView.pyOperateViewDrawRedFrame_block = ^(CGSize size, CGPoint localPoint) {//正在画        

@strongify(self)        

JBY_RedFrameView *redFrameView = [redFramViewArr lastObject];        

float width = redFrameView.size.width;        

float height = redFrameView.size.height;        

if (redFrameView.beginPoint.y>localPoint.y) {           

redFrameView.frame = CGRectMake(redFrameView.beginPoint.x, localPoint.y,width + size.width, redFrameView.beginPoint.y-localPoint.y);       

}else{           

redFrameView.frame = CGRectMake(redFrameView.beginPoint.x, redFrameView.beginPoint.y, width + size.width, localPoint.y-redFrameView.beginPoint.y);       

}        

if (redFrameView.beginPoint.x>localPoint.x) {           

redFrameView.frame = CGRectMake(localPoint.x, localPoint.y,redFrameView.beginPoint.x-localPoint.x, redFrameView.beginPoint.y-localPoint.y);       

}else{           

redFrameView.frame = CGRectMake(redFrameView.beginPoint.x, redFrameView.beginPoint.y, localPoint.x - redFrameView.beginPoint.x, localPoint.y-redFrameView.beginPoint.y);       

}   

};    

self.pyOperateView.PYOperateViewDrawRedFrameEnd_block = ^{//结束画           

};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容