Undo with multitouch drawing in iOS(在 iOS 中使用多点触控绘图撤消)
问题描述
我在写作时使用多点触控,所以基本上我正在做的是,我在用手支持写作,因为通常,它是如何用户权限的,我点击了这个链接 如何忽略多点触控序列中的某些 UITouch 点
I am working with multitouch while writing, So basically what I am doing is, I am writing with hand support, because typically, its how user rights, I followed this link How to ignore certain UITouch Points in multitouch sequence
一切正常,但是当我用手触摸屏幕书写时,它们的撤消有些问题,否则它工作正常.
Everything is working fine, but their is some problem with undo when I write with my hand touching the screen, otherwise it works fine.
下面是我的代码
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch* topmostTouch = self.trackingTouch;
for (UITouch *touch in touches)
{
ctr = 0;
touchStartPoint1 = [touch locationInView:self];
[m_undoArray removeAllObjects];
[m_redoArray removeAllObjects];
[m_parentRedoArray removeAllObjects];
if(!topmostTouch || [topmostTouch locationInView:self].y > touchStartPoint1.y)
{
topmostTouch = touch;
pts[0] = touchStartPoint1;
}
}
if (self.trackingTouch != nil && self.trackingTouch != topmostTouch) // ![touches containsObject:self.trackingTouch])
{
[self discardDrawing];
}
self.trackingTouch = topmostTouch;
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if(self.trackingTouch== nil)
{
return;
}
CGPoint p = [self.trackingTouch locationInView:self];
ctr++;
pts[ctr] = p;
if (ctr == 4)
{
pts[3] = midPoint(pts[2], pts[4]);
self.currentPath = [[DrawingPath alloc] init];
[self.currentPath setPathColor:self.lineColor];
self.currentPath.pathWidth = [NSString stringWithFormat:@"%f",self.lineWidth];
[self.currentPath.path moveToPoint:pts[0]];
[self.currentPath.path addCurveToPoint:pts[3] controlPoint1:pts[1] controlPoint2:pts[2]];
CGPathRef cgPath = self.currentPath.path.CGPath;
mutablePath = CGPathCreateMutableCopy(cgPath);
[m_undoArray addObject:self.currentPath];
[self setNeedsDisplay];
pts[0] = pts[3];
pts[1] = pts[4];
ctr = 1;
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches)
{
if(touch == self.trackingTouch)
{
[m_parentUndoArray addObject:[NSArray arrayWithArray:m_undoArray]];
}
}
}
-(void)undoButtonClicked
{
NSMutableArray *undoArray = [m_parentUndoArray lastObject];
NSLog(@"%@",undoArray);
[m_parentUndoArray removeLastObject];
[m_parentRedoArray addObject:undoArray];
m_drawStep = UNDO;
[self setNeedsDisplay];
}
- (void)drawRect
{
I have different cases here, I am showing Of Undo
for(int i = 0; i<[m_parentUndoArray count];i++)
{
NSMutableArray *undoArray = [m_parentUndoArray objectAtIndex:i];
NSLog(@"%@",undoArray);
for(int i =0; i<[undoArray count];i++)
{
DrawingPath *drawPath = [undoArray objectAtIndex:i];
GPathRef path = drawPath.path.CGPath;
mutablePath = CGPathCreateMutableCopy(path);
//Draw into CgLayer
}
}
}
这是更好地理解我的问题的图像,我首先写了这个
Here is the image to understand my problem better, I first wrote this
单击一次撤消后,您可以在上方看到,其他部分已撤消,而不是最后一部分.所以在这方面我需要你的帮助.
After clicking on Undo once,you can see above that, some other part has been undone, instead of the last part. So I need you help in this regard.
推荐答案
m_redoArray 似乎是大爸爸,你从中汲取灵感的那个.我不明白你为什么在'touchesBegan ...'中清空它,这些数组中的一个肯定必须保持不变,否则你会从绘图开始一直丢弃东西,不是吗?
m_redoArray appears to be the big daddy, the one you draw from. I don't understand why you empty this out out in 'touchesBegan...', surely one of these arrays must carry through touchesBegan unaltered, or you'll be dropping stuff from the start of your drawing all the way through, no?
在我看来,这就是您在此处的示例中删除地狱"的方式..
It appears to me that this is how you dropped the 'Hell' in your example here..
这篇关于在 iOS 中使用多点触控绘图撤消的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 iOS 中使用多点触控绘图撤消
基础教程推荐
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01