最近因为项目需要,添加画笔功能 设计是仿微信的 微信的画笔 后面图片可缩放 移动 图片的移动是用2只手指以上触碰才可以移动。
刚开始使用UIscrollView 发现画笔与UIscrollView 自带的拖拽手势起了冲突 ,自己曾用手势来实现缩放但是效果觉得没有UIscrollView 的好 所以想着尝试用UIscrollView 然后想法去屏蔽UIScrollView的panGestureRecognizer,
自己曾用手势来实现缩放 但是效果觉得没有UIscrollView 的好 所以想着尝试用UIscrollView去屏蔽他的.
scrollView..panGestureRecognizer 是readOnly
看了好多文章 找到解决方法 — 重写UIscrooView 的手势的代理方法
首先建一个类继承自UIScrollView,
重写下面方法 让scrollView 自带的手势不可用
之后我这里是添加了一个需要两个手指才能滑动的手势 这样就不会跟我的画笔冲突了.下面摆上代码
@implementationLNFingerContainerScrollView
- (instancetype)init
{
self= [superinit];
if(self) {
[selfsetGesture];
}
returnself;
}
- (void)setGesture{
_gesture=[[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(gestureAction:)];
_gesture.minimumNumberOfTouches= 2;
[selfaddGestureRecognizer:_gesture];
}
- (void)setFrame:(CGRect)frame{
[supersetFrame:frame];
[selfsetContentSize:CGSizeMake(frame.size.width, frame.size.height)];
}
- (void)setContentView:(UIView*)contentView{
_contentView= contentView;
[_contentViewremoveFromSuperview];
[_contentViewsetFrame:self.bounds];
[selfaddSubview:_contentView];
}
- (void)gestureAction:(UIPanGestureRecognizer*)sender{
CGPointpt = [sender translationInView:self];
CGPointoffset = self.contentOffset;
CGFloatx = offset.x- pt.x;
CGFloaty = offset.y- pt.y;
if(x < 0) {
x= 0;
}elseif(x > self.contentSize.width- self.frame.size.width) {
x = self.contentSize.width- self.frame.size.width;
}
if(y < 0) {
y= 0;
}
if(y > self.contentSize.height- self.frame.size.height) {
y =self.contentSize.height- self.frame.size.height;
}
[selfsetContentOffset:CGPointMake(x, y)];
[sender setTranslation:CGPointMake(0, 0) inView:self];
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer{
if(gestureRecognizer == self.panGestureRecognizer) {
returnNO;
}
returnYES;
}
@end
网友评论