绘图GUI有时会被删除

时间:2016-08-04 17:19:50

标签: ios objective-c drawing draw

所以我正在开发一个iOS应用程序,它有一个GUI,您可以在其中绘制图像,添加过滤器等。绘图功能可以工作,但有时会在绘图开始时随机剪切。基本上,如果您开始在屏幕上绘图并且它的工作时间超过半秒,那么它会一直有效,直到您再次尝试为止;然而,有时当你开始画画时,它会在一瞬间切掉,因为看似没有理由。

// Draws a line from point1 to point2
- (void) drawOnImage:(CGPoint *)point1 :(CGPoint *)point2 {
    UIGraphicsBeginImageContext(self.view.frame.size);
    [self.mainImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), point1->x, point1->y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), point2->x, point2->y);
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush );
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    self.mainImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

}

// Beginning of the drawing, only happens when you click but don't move around on the screen
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    lastPoint = [touch locationInView:self.view];

    if (currentAction == DRAW) {
        [self backupImage];

        //disable the renderImageView so that the gestures dont interfere


        [self drawOnImage :&lastPoint :&lastPoint];
    }
}

// When lines are being drawn on the image (when your finger is moving)
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if (currentAction == DRAW) {
        UITouch *touch = [touches anyObject];
        CGPoint currentPoint = [touch locationInView:self.view];
        [self drawOnImage :&currentPoint :&lastPoint];
        lastPoint = currentPoint;

    }
}

这是我的故事板布局;如您所见,代码在用户绘制时创建一行的CGRects,然后使用CGRect重新生成主图像作为图像的一部分。

storyboard

这是问题的一个例子,看到立即结束的两个黑色绘图标记?顶部抽签工作并跟进,其他两个立即切出,然后没有渲染任何其他线。

issue

为什么会这样?起初我们认为它是模拟器,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

修复了修复其他问题的过程中的问题。我认为我的手势识别器混乱(实际上不应该发生这种情况,因为当用一根手指触摸时只应该有一个手势),尝试将手势识别器代表设置为正确的视图(通常是自己的),如果你有

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

实现了函数,告诉它只在某些情况下返回true。我怀疑任何人都会遇到这个问题,所以发布这个解决方案可能有点无用。