天天看點

關于UIScrollView的一點小發現

先簡單介紹我的項目,利用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測試期望效果成功,隻是書寫反應較慢,有待改進。

如果有類似的使用場景,可以用上這個辦法。