目标 C:在 UIScrollView 上触摸绘图

Posted

技术标签:

【中文标题】目标 C:在 UIScrollView 上触摸绘图【英文标题】:Objective C: Touch Draw On UIScrollView 【发布时间】:2012-01-26 05:36:20 【问题描述】:

我正在尝试使用 pageEnabled UIScrollView 制作一个带有不同页面的绘图书应用程序。

我会用什么?触摸事件不起作用。

我在触摸移动之前有这个代码:

    touchSwiped = YES;

    UITouch *touch = [touches anyObject];   
    CGPoint currentPoint = [touch locationInView:self.view];
    currentPoint.y -= 20;

    UIGraphicsBeginImageContext(self.view.frame.size);
    [drawView.image drawInRect:CGRectMake(0, 0, drawView.frame.size.width, drawView.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 15.0);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0, 0, 0, 1.0);
    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    drawView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastPoint = currentPoint;

    touchMoved++;

    if (touchMoved == 10) 
        touchMoved = 0;
    

我不知道我需要做哪些调整才能实现这一点。

有人吗??

提前致谢。

【问题讨论】:

如果在 UIScrollView 上绘图,滚动视图如何知道触摸是绘制还是滚动? 我用 UIPanGesture 试过了 当您说“触摸事件不起作用”时,您的确切意思是什么?它滚动而不是绘图?或者触摸根本没有被捕获?请记住,要使其滚动,内容大小必须大于其框架大小。 它滚动而不是绘图...我已经尝试了我所知道的一切,但到目前为止还没有解决... 【参考方案1】:

如果您使用 cmets 中提到的 UIPanGestureRecognizer,那么您已将 minimumNumberOfTouches 设置为大于 1 的值,对吗?不然怎么区分绘制和滚动呢?

我的建议是:

    请勿使用 UIScrollView,除非您首先找到一种方法来最终确定触摸是用于绘制还是用于用户预期的滚动。改用 UIView 的子类,然后可能使用按钮在页面之间移动。 或者您可以有一个按钮,用于在滚动视图的页面之间切换绘制和滚动(分页)。 查看这个网站,了解一些绘图技巧和实际代码http://www.ifans.com/forums/showthread.php?t=132024

【讨论】:

以上是关于目标 C:在 UIScrollView 上触摸绘图的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:检测 UIScrollView 上的触摸事件

允许单点触摸事件通过 UIScrollView

UIScrollView 内的绘图视图

让 UIScrollView 放弃 UITouch

无论触摸发生在哪里,都滚动 UIScrollView

自动滚动时 UIScrollView 触摸不起作用