真的很奇怪的drawRect行为??

Posted

技术标签:

【中文标题】真的很奇怪的drawRect行为??【英文标题】:Really weird drawRect behavior?? 【发布时间】:2013-12-25 05:47:50 【问题描述】:

我有一个非常简单的应用程序,用户可以在其中进行绘图。用户点击 3 次,将在这 3 次点击处绘制一个角度。在每个水龙头的位置,都有一个圆圈。下面是它的外观图片:

第一次点击时,只会创建一个圆圈,因为没有其他点可以连接(应该如此)。在第二个水龙头上,它连接了从第一个水龙头到第二个水龙头的线(应该如此)。在第三次点击时,它变得很奇怪,并从第二个圆圈的边缘(应该在中心?)连接到第三次点击。任何想法为什么会发生这种情况??

点击 3 次后:

3 次点击的另一个例子:

我是这样画的:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    UITouch *touch = [touches anyObject];
    [self setOpacity:o];
    if (CGPointEqualToPoint(first, CGPointZero)) 
        first = [touch locationInView:self];
    
    else if (!CGPointEqualToPoint(first, CGPointZero) && CGPointEqualToPoint(second, CGPointZero)) 
        second = [touch locationInView:self];
    
    else if (!CGPointEqualToPoint(first, CGPointZero) && !(CGPointEqualToPoint(second, CGPointZero)) && CGPointEqualToPoint(third, CGPointZero)) 
        third = [touch locationInView:self];
    
    else 
        first = [touch locationInView:self];
        second = CGPointZero;
        third = CGPointZero;
    

    [self setNeedsDisplay];


- (void)drawRect:(CGRect)rect 
    CGContextRef context = UIGraphicsGetCurrentContext();

if (!CGPointEqualToPoint(first, CGPointZero)) 
    CGRect rectangle = CGRectMake(first.x - 10, first.y - 10, 20, 20);
    CGContextAddEllipseInRect(context, rectangle);
    CGContextMoveToPoint(context, first.x, first.y);

    if (!CGPointEqualToPoint(second, CGPointZero)) 
        CGContextAddLineToPoint(context, second.x, second.y);
        CGRect rectangle2 = CGRectMake(second.x - 10, second.y - 10, 20, 20);
        CGContextAddEllipseInRect(context, rectangle2);
    

    if (!CGPointEqualToPoint(third, CGPointZero)) 
        CGContextAddLineToPoint(context, third.x, third.y);
        CGRect rectangle3 = CGRectMake(third.x - 10, third.y - 10, 20, 20);
        CGContextAddEllipseInRect(context, rectangle3);
        

        CGContextStrokePath(context);
    

【问题讨论】:

【参考方案1】:

因为在绘制第二个椭圆CGContextAddEllipseInRect(context, rectangle2); 后,您的当前位置发生了变化 试试这个:

- (void)drawRect:(CGRect)rect 
    CGContextRef context = UIGraphicsGetCurrentContext();

    UIColor * w = [UIColor whiteColor] ;
    UIColor * r = [UIColor redColor] ;
    CGContextSetStrokeColorWithColor(context, w.CGColor) ;
    CGContextSetFillColorWithColor(context, r.CGColor) ;

    if (!CGPointEqualToPoint(first, CGPointZero)) 
        CGRect rectangle = CGRectMake(first.x - 10, first.y - 10, 20, 20);
        CGContextAddEllipseInRect(context, rectangle);
        CGContextMoveToPoint(context, first.x, first.y);

        if (!CGPointEqualToPoint(second, CGPointZero)) 
            CGContextAddLineToPoint(context, second.x, second.y);
            CGRect rectangle2 = CGRectMake(second.x - 10, second.y - 10, 20, 20);
            CGContextAddEllipseInRect(context, rectangle2);
            CGContextMoveToPoint(context, second.x, second.y);
        

        if (!CGPointEqualToPoint(third, CGPointZero)) 
            CGContextAddLineToPoint(context, third.x, third.y);
            CGRect rectangle3 = CGRectMake(third.x - 10, third.y - 10, 20, 20);
            CGContextAddEllipseInRect(context, rectangle3);
        

        CGContextStrokePath(context);
    

【讨论】:

万岁!我有一种感觉,它就是那种性质的东西。另外,我省略了填充/描边颜色代码,因为发布的代码已经很长了,我认为它会被假定。非常感谢!

以上是关于真的很奇怪的drawRect行为??的主要内容,如果未能解决你的问题,请参考以下文章

真的很奇怪 GWT RPC 行为 + 显示

C++ 中的 if 语句行为真的很奇怪

触发drawRect重绘视图的按钮

removeFromParent()奇怪的行为

Magento xml布局奇怪的行为

更新不起作用时 Laravel 保存(奇怪的行为)