Iphone SDK触动事件

Iphone SDK触动事件,iphone,cocoa-touch,Iphone,Cocoa Touch,为了更好地理解触摸,我写了几行文字来记录触摸: -(void)drawRect:(CGRect)rect{ NSLog(“我的画”); CGContextRef context=UIGraphicsGetCurrentContext(); CGContextSetLineWidth(上下文,2); CGContextSetStrokeColorWithColor(上下文[UIColor redColor].CGColor); CGContextMoveToPoint(上下文,上一个x,上一个y)

为了更好地理解触摸,我写了几行文字来记录触摸:

-(void)drawRect:(CGRect)rect{
NSLog(“我的画”);
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextSetLineWidth(上下文,2);
CGContextSetStrokeColorWithColor(上下文[UIColor redColor].CGColor);
CGContextMoveToPoint(上下文,上一个x,上一个y);
CGContextAddLineToPoint(上下文,cur.x,cur.y);
CGContextStrokePath(上下文);
返回;
}
-(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件
{
UITouch*touch=[触摸任何对象];
prev=[触摸previousLocationInView:self];
cur=[触摸位置查看:自];
[self-setNeedsDisplayInRect:CGRectMake(上一个x,上一个y,晶圆厂(当前x-上一个x),晶圆厂(当前y-上一个y));
}
很明显,我的setNeedsDisplay不正确,因为它只适用于从正坐标到负坐标(从左上角到右下角)的移动。带着这些问题:

  • 似乎我必须为4种不同的潜在运动方向(从位置X、Y到负X、Y、从位置X到负X等)分别写入setNeedsDisplay。这是一个正确的方法,还是我遗漏了一些基本要素

  • 即使是正确的移动,线条也不是坚实的,而是断裂的(取决于手指跟踪的速度)。为什么不是实线来跟踪运动


  • 谢谢

    setNeedsDisplay
    不会立即调用
    drawRect
    。事实上,在下次绘制视图之前,
    touchsmoved
    可能会被多次调用,这就是为什么您会看到虚线。

    您对CGRectMake的调用应该是:

    CGRectMake (MIN(cur.x, prev.x), MIN (cur.y, prev.y), fabs (cur.x-prev.x), fabs (cur.y - prev.y))
    
    在我的代码中,我用一个函数从任意两点生成一个rect来概括它,例如:

    CGRect rectWithPoints(CGPoint a, CGPoint b)
    {
    return CGRectMake(
       MIN (a.x, b.x),  
       MIN (a.y, b.y), 
       fabs (a.x - b.x), 
       fabs (a.y - b.y));
    }
    

    你已经问了17个问题,但没有接受任何一个问题的答案。这可能会阻止其他人花时间为您提供任何答案。只是提醒一下。谢谢,我试试看。这对断线仍然没有帮助,是吗?我在网上找到了一些教程,它会在每条线段后将每个屏幕作为一个图像记住,然后渲染图像并向其添加下一组移动。这种方法根本不需要setNeedsDisplay。