如何根据iOS上的touchMove事件在屏幕上绘制动态矩形

时间:2011-11-08 07:08:09

标签: objective-c ios xcode cocoa-touch ipad

矩形将被视为两个点,第一个点将是touchBegan点,而touchMove将是第二个点,矩形将根据用户手指动态绘制,(就像当您点击一次点击桌面时并移动鼠标,你会得到动态矩形)。

由于

2 个答案:

答案 0 :(得分:3)

  1. 您应该定义UIView的子类,例如DrawingView
  2. DrawingView中,您应该实现以下方法:

    在方法中保存起点:- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    重绘此处- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

    在此处隐藏(或保存)- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 在这里- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

  3. 例如,在第一种方法中,您可以通过以下方式检测起点:

    CGPoint startCornerOfYourRect;
    for (UITouch *touch in touches)
    {
        startCornerOfYourRect  = [touch locationInView:self];
        break;
    }
    

答案 1 :(得分:2)

好的,您可以在touchesMoved中绘制矩形(使用@Nekto touchesBegan来存储矩形的起点)。

假设您在我们正在绘制的UIView上保留一个引用并将其称为drawnView。 在touchesBegan中,我们为drawnView

设置了框架的原点

以下是touchesMoved

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)event
{
    // We only take care of a single touch
    if ([touches count] == 1)
    {
        UITouch *touch = [touches anyObject];
        // Find the width and height of the rect
        CGRect drawnFrame = drawnView.frame
        drawnFrame.size.width = [touch locationInView:parentView].x - drawnFrame.origin.x
        drawnFrame.size.height = [touch locationInView:parentView].y - drawnFrame.origin.y
        [drawnView setFrame:drawnFrame];
    }
}

不要复制粘贴代码,我没有用Xcode或其他东西写。它可能有错误(当然)。但我希望它可以帮助您找到解决方案。小心,如果你将手指拖到顶部或左侧(高度和宽度的负值),我不知道它会如何表现。