如何在设备上的每个触摸位置周围绘制一个圆圈?

时间:2013-02-17 01:24:56

标签: ios multi-touch touchesbegan

新程序员在这里试图逐步采取行动。我试图找到一种方法在设备上的每个当前触摸位置周围画一个圆圈。屏幕上有两根手指,每根手指下有一圈。

我目前有工作代码在一个触摸位置绘制圆圈,但是一旦我在屏幕上放置另一个手指,圆圈移动到第二个触摸位置,第一个触摸位置留空。当我添加第三个时,它移动到那里等。

理想情况下,我希望屏幕上最多可以有5个活动圈,每个手指一个。

这是我目前的代码。

@interface TapView ()
@property (nonatomic) BOOL touched;
@property (nonatomic) CGPoint firstTouch;
@property (nonatomic) CGPoint secondTouch;
@property (nonatomic) int tapCount;
@end

@implementation TapView

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];

NSArray *twoTouch = [touches allObjects];
    if(touches.count == 1)
    {
        self.tapCount = 1;
        UITouch *tOne = [twoTouch objectAtIndex:0];
        self.firstTouch = [tOne locationInView:[tOne view]];
        self.touched = YES;
        [self setNeedsDisplay];
    }
    if(touches.count > 1 && touches.count < 3)
    {
        self.tapCount = 2;
        UITouch *tTwo = [twoTouch objectAtIndex:1];
        self.secondTouch = [tTwo locationInView:[tTwo view]];
        [self setNeedsDisplay];
    } 
}
-(void)drawRect:(CGRect)rect
{
        if(self.touched && self.tapCount == 1)
        {
            [self drawTouchCircle:self.firstTouch :self.secondTouch];
        }
}
-(void)drawTouchCircle:(CGPoint)firstTouch :(CGPoint)secondTouch
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(ctx,0.1,0.1,0.1,1.0);
    CGContextSetLineWidth(ctx,10);
    CGContextAddArc(ctx,self.firstTouch.x,self.firstTouch.y,30,0.0,M_PI*2,YES);
    CGContextStrokePath(ctx);
}

我在appDelegate.m的setMultipleTouchEnabled:YES方法中声明了didFinishLaunchingWithOptions

我试图在drawTouchCircle方法中使用if语句,根据self.firstTouch.xself.secondTouch.x更改为self.tapCount,但这似乎打破了整个事情,在任何触摸位置都没有留下任何圆圈。

我很难找到我的问题,而且我知道这可能很简单。

1 个答案:

答案 0 :(得分:3)

我刚刚编写了一些似乎有用的代码。我在视图中添加了一个名为NSMutableArray的{​​{1}}属性,其中每个圈子都包含circles。 在UIBezierPath中,我设置了数组并设置了-awakeFromNib - (我认为您是通过对appDelegate.m中视图的引用来完成此操作)。

在视图中,我使用self.multipleTouchEnabled = YES-touchesBegan方法调用此方法。

-touchesMoved

结束的是:

-(void)setCircles:(NSSet*)touches
{   
    [_circles removeAllObjects]; //clear circles from previous touch

    for(UITouch *t in touches)
    {
        CGPoint pt= [t locationInView:self];
        CGFloat circSize = 200; //or whatever you need
        pt = CGPointMake(pt.x - circSize/2.0, pt.y - circSize/2.0);
        CGRect circOutline = CGRectMake(pt.x, pt.y, circSize, circSize);
        UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:circOutline];
        [_circles addObject:circle];
    }
    [self setNeedsDisplay];
}

然后我在-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { [_circles removeAllObjects]; [self setNeedsDisplay]; } 中循环circles并在每一个上致电-drawRect