先簡單介紹我的項目,利用UIView重載drawRect方法來實作在UIView中用手指寫字畫畫。
這個時候肯定要能放大縮小,要不然一個手機螢幕能容納的下的東西實在不多。
我本身是想用UIPanGestureRecognizer和UIPinchGestureRecognizer來實作UIView放大拖動效果的,然而在實際拖動時,有嚴重bug。
相信很多人都知道UIScrollView可以用來實作圖檔的放大縮小。是以我所采用的方法是将自己的能繪圖的UIView作為subView添加到UIScrollView中。這個時候,UIScrollView中由于有自帶的UIPanGestureRecognizer,是以和我的view中添加的UIPanGestureRecognizer相沖突,然後我就用touchesBegin、touchesMoved和touchesEnded+setNeedsDisplay來實作書寫。這樣添加完UIView之後,自定義UIScrollView,實作下面的三個方法:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self touchesShouldBegin:touches withEvent:event inContentView:_drawView];
}
-(BOOL)touchesShouldBegin:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
return YES;
}
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return _drawView;
}
就可以實作在UIScrollView中的UIView中書寫,然而放大或者縮小之後,隻能響應拖拽動作,并不能書寫,看了很多大神的部落格之後并沒有找到解決辦法,在探索了一番之後,我找到了解決方法,繼續添加以下方法:
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if(scrollView.panGestureRecognizer.numberOfTouches == ){
self.scrollEnabled = NO;
}else if(scrollView.panGestureRecognizer.numberOfTouches == ){
self.scrollEnabled = YES;
}
}
command+R測試期望效果成功,隻是書寫反應較慢,有待改進。
如果有類似的使用場景,可以用上這個辦法。