Objective C: Drawing with Fingers on UIScrollView

2019-09-01 16:17发布

I am trying to make a sketch pad app.

I used UIScrollView for paging and UIImageView for the drawing.

I put the UIImageView on top of the scrollView but it's not added to UIScrollView so it will not scroll.

The issue now...

It's not writing when...

[scrollView setScrollEnable:YES];
[scrollView setUserInteractionEnabled:YES];

i need to set it to NO with the use of a button for it to write,

is there a way that i can scroll and write at the same time without using any button??

1条回答
狗以群分
2楼-- · 2019-09-01 16:32

This is definitely not the correct way of building such an application.

A UIScrollView is meant for scrolling content not for drawing. And you don't need a UIImageView to draw content either, a simple UIView would be enough.

Here you're best bet would be to create one UIScrollView and disable it's scrolling because you'll be handling it with two fingers, while the drawing will be handled pan another gesture recognizer.

UIPanGestureRecognizer *twoFingerScrolling  = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onTwoFingerScroll:)] autorelease];
[twoFingerScrolling setMinimumNumberOfTouches:2];
[twoFingerScrolling setMaximumNumberOfTouches:2]; 
UIPanGestureRecognizer *oneFingerDraw   = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onOneFingerDraw:)] autorelease];
[oneFingerDraw setMinimumNumberOfTouches:1];
[oneFingerDraw setMaximumNumberOfTouches:1];

[yourScollView addGestureRecognizer:twoFingerScrolling];
[yourScollView addGestureRecognizer:oneFingerDraw];

And later on in your code you can easily process both events, the scrolling:

- (void)onTwoFingerScroll:(UIPanGestureRecognizer*)sender
{
   // Calculate the content offset from the shifting that occured
   //[yourScrollView setContentOffset:theContentOffset]
}

And the drawing (which can be done by the Quartz Tookit)

- (void)onOneFingerDraw:(UIPanGestureRecognizer*)sender
    {
       // Processing the drawing by using comparing:
       if (sender.state == UIGestureRecognizerStateBegan) 
         { /* drawing began */ }
       else if (iRecognizer.state == UIGestureRecognizerStateChanged)
         { /* drawing occured */ }
       else if (iRecognizer.state == UIGestureRecognizerStateEnded) 
         { /* drawing ended /* }
    }

Hope this helps.

查看更多
登录 后发表回答