我正在编写一个iPhone应用程序,就像appstore上的pick stick应用程序一样。我已经完成了绘制多行并使用CoreGraphics显示它。但现在我不知道当用户点击它时如何删除该行。我在Google上搜索了很多,但没有发现任何相关内容。
我在其他地方看过你的这篇帖子,这真的帮助了我。但问题是 如果我有一根棍子,然后另一根棍子在它上面。 当我点击下面的棒时,它不应该被删除,如果我点击上面的话,它应该被删除,如果它上面没有棒。如何实现这个东西..我需要存储路径,即我的行是UIBeizerpath在列表,数组,字典中的任何东西,请帮助我这个东西。我找不到任何东西。
答案 0 :(得分:0)
我看到引发了两个问题:(1)如何检测视图中绘制的线上的触摸,以及(2)如何在没有触摸线的情况下重绘视图。组合方法是将线对象定义为转换为字符串的矩形:NSStringFromCGRect(CGRectMake(x, y, width, height)
。将一个或多个行对象添加到NSSet *setOfLines
,并在显示行的drawRect:
类的UIView
方法中添加Quartz 2D / Core Graphics绘图代码。
- (void)drawRect:(CGRect)rect
{
gc = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(gc, lineThickness]);
CGContextSetStrokeColorWithColor(gc, ([UIColor redColor]).CGColor);
for (NSString *lineString in setOfLines) {
CGRect line = CGRectFromString(lineString);
CGContextMoveToPoint(gc, line.origin.x, line.origin.y);
CGContextAddLineToPoint(gc, (line.origin.x + line.size.width), (line.origin.y + line.size.height));
}
CGContextStrokePath(gc);
}
在同一个UIView类中,添加一个轻击手势识别器(注意双击共存):
UITapGestureRecognizer *singleTapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(lineSingleTapped:)];
singleTapper.numberOfTapsRequired = 1;
[singleTapper requireGestureRecognizerToFail:doubleTapper];
[cell addGestureRecognizer:singleTapper];
- (IBAction)lineSingleTapped:(UITapGestureRecognizer *)sender
{
CGPoint tapPoint = [sender locationInView:self];
// Get the line that was tapped
for (NSString *lineString in setOfLines) {
CGRect line = CGRectFromString(lineString);
// Make a rectangle that defines the tappable area of a line: disclaimer, might be very thin or short!
// A minimum size of 44.0 x 44.0 is advisable
CGRect lineTapArea = CGRectMake(line.origin.x, line.origin.y, (line.origin.x + line.size.width), line.origin.y + line.size.height);
if (CGRectContainsPoint(lineTapArea, tapPoint)) {
[setOfLines removeObject:lineObject];
[self setNeedsDisplayInRect:lineTapArea];
break;
}
}
}
这里的设计模式是:
答案 1 :(得分:0)
如果您在UIView中使用Core Graphics,则不必删除任何内容。相反,您可以完全重绘视图,但可能少用一根。