目标 C:在 UIScrollView 中触摸时绘制(写入)

Posted

技术标签:

【中文标题】目标 C:在 UIScrollView 中触摸时绘制(写入)【英文标题】:Objective C: Draw(Write) on Touch in a UIScrollView 【发布时间】:2012-01-25 07:13:42 【问题描述】:

我的 touchesMoved 上有这段代码,但和其他代码一样,它在 UIScrollView 上不起作用

在这里,我的 touchesMoved:

touchSwiped = YES;

    currentTouch = [touch locationInView:self.view];
    currentTouch.y -= 5;

    UIGraphicsBeginImageContext(self.view.frame.size);
    [writeView.image drawInRect:CGRectMake(0, 0, 768, 1024)];

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextSetLineWidth(context, 15);
    CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
    CGContextSetBlendMode(context, kCGBlendModeNormal);
    CGContextMoveToPoint(context, endPoint.x, endPoint.y);
    CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y);
    CGContextStrokePath(context);
    writeView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    endPoint = currentTouch;

    touchMoved++;

    if (touchMoved == 10) 
        touchMoved = 0;
    

所以,我使用手势识别器转移了它,但它仍然无法正常工作。

我使用了 PanGestureRecognizer

这里:

- (void) writePan:(UIPanGestureRecognizer *)writingRecognizerP 
    switch (writingRecognizerP.state)
    
        case UIGestureRecognizerStateChanged:

            [scrollView setScrollEnabled:NO];
            [scrollView setUserInteractionEnabled:NO];

            touchSwiped = YES;

            currentTouch = [writingRecognizerP locationInView:scrollView];
            currentTouch.y -= 5;

            UIGraphicsBeginImageContext(self.view.frame.size);
            [writeView.image drawInRect:CGRectMake(0, 0, 768, 1024)];

            CGContextRef context = UIGraphicsGetCurrentContext();

            CGContextSetLineCap(context, kCGLineCapRound);
            CGContextSetLineWidth(context, 15);
            CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
            CGContextSetBlendMode(context, kCGBlendModeNormal);
            CGContextMoveToPoint(context, endPoint.x, endPoint.y);
            CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y);
            CGContextStrokePath(context);
            writeView.image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            endPoint = currentTouch;

            touchMoved++;

            if (touchMoved == 10) 
                touchMoved = 0;
            


            break;

        case UIGestureRecognizerStateEnded:
            [scrollView setScrollEnabled:YES];
            [scrollView setUserInteractionEnabled:YES];
            break;

    


任何知道我如何在触摸上书写的人?

将不胜感激! :)

【问题讨论】:

什么是writeView?它与视图层次结构中的 self 有什么关系? 它是一个清晰的UIImageView,它是绘图应该出现的地方。 如果您使用 NSLog(@"%@", writeView),它在视图层次结构中是否正确且大小合适? 1) 是否调用了任一方法? 2)你是如何设置手势识别器的? 3) 如果是这样,如果你添加一个 CGContextSetRGBFillColor(context, 1, 0, 0, 1);然后是 CGContextFillRect(context, self.view.bounds),你看到红色矩形了吗?我正在尝试确定确切的故障点 - 这不是为视图绘制更新的正常方式,但看起来它仍然应该工作。 【参考方案1】:

您应该在-drawRect: 中完成所有绘图,当有变化时发送您的视图-setNeedsDisplaysetNeedsDisplayInRect: 消息。

【讨论】:

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

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

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

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

UIScrollview 窃取触摸事件

Objective C 触摸事件问题

目标C中UIScrollView中的zoomToRect方法不起作用