所以我正在开发一个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 :¤tPoint :&lastPoint];
lastPoint = currentPoint;
}
}
这是我的故事板布局;如您所见,代码在用户绘制时创建一行的CGRects,然后使用CGRect重新生成主图像作为图像的一部分。
这是问题的一个例子,看到立即结束的两个黑色绘图标记?顶部抽签工作并跟进,其他两个立即切出,然后没有渲染任何其他线。
为什么会这样?起初我们认为它是模拟器,但事实并非如此。
答案 0 :(得分:0)
修复了修复其他问题的过程中的问题。我认为我的手势识别器混乱(实际上不应该发生这种情况,因为当用一根手指触摸时只应该有一个手势),尝试将手势识别器代表设置为正确的视图(通常是自己的),如果你有
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
实现了函数,告诉它只在某些情况下返回true。我怀疑任何人都会遇到这个问题,所以发布这个解决方案可能有点无用。