ios绘制简单的线条

时间:2012-11-20 06:29:22

标签: objective-c ios

这是我的UIPanGestureRecognizer

- (void)SwipeHandle:(UIPanGestureRecognizer*)gestureRecognizer
{
UIView *theSuperview = self.numberview;
CGPoint touchPointInSuperview = [gestureRecognizer locationInView:theSuperview];

float gapX = image1.frame.size.width / 8;
float gapY = image1.frame.size.height / 8.48;

if(gestureRecognizer.state == UIGestureRecognizerStateBegan)
{
    if(!ispause && [time.text intValue] > 0){
        if(!isbegan && !isended){
            for(int i = 1; i <= 16; i++)
            {
                UIView *imageview = [self.numberview viewWithTag:i];
                if (CGRectContainsPoint(imageview.frame, touchPointInSuperview))
                {
                    isbegan = YES;
                    isreverse = NO;
                    if([[ischose objectAtIndex:i-1] boolValue] == 0)
                    {
                        currentposition = imageview.tag;
                        positionvalue += pow(i, 3);
                        currentanswer += [self converter:[NSString stringWithFormat:@"%@", [allimagenumbers substringWithRange:NSMakeRange(i-1, 1)]]];
                        [ischose replaceObjectAtIndex:i-1 withObject:[NSNumber numberWithBool:YES]];
                        [self changeimage:@"selected"];
                    }

                    previouspoint = imageview.frame.origin;
                    break;
                }
            }
        }
    }
}
else if(gestureRecognizer.state == UIGestureRecognizerStateChanged)
{
    if(isbegan && !isended)
    {
        if(touchPointInSuperview.x >= 0 && touchPointInSuperview.x <= self.numberview.frame.size.width && touchPointInSuperview.y >= 0 && touchPointInSuperview.y <= self.numberview.frame.size.height)
        {
            for(int i = 1; i <= 16; i++)
            {
                UIImageView *imageview = (UIImageView*)[self.numberview viewWithTag:i];
                if (CGRectContainsPoint(imageview.frame, touchPointInSuperview))
                {
                    if((touchPointInSuperview.x >= imageview.frame.origin.x + gapX && touchPointInSuperview.x < imageview.frame.origin.x + imageview.frame.size.width  - gapX) && (touchPointInSuperview.y >= imageview.frame.origin.y  + gapY && touchPointInSuperview.y < imageview.frame.origin.y + imageview.frame.size.height - gapY ))
                    {
                        if([[ischose objectAtIndex:i-1] boolValue] == 0 && !isreverse)
                        {
                            currentposition = imageview.tag;
                            positionvalue += pow(i, 3);
                            currentanswer += [self converter:[NSString stringWithFormat:@"%@", [allimagenumbers substringWithRange:NSMakeRange(i-1, 1)]]];
                            [ischose replaceObjectAtIndex:i-1 withObject:[NSNumber numberWithBool:YES]];
                            [self changeimage:@"selected"];

                            currentpoint = imageview.frame.origin;

                            [self.numberview drawRect:CGRectMake(self.numberview.frame.origin.x, self.numberview.frame.origin.y, self.numberview.frame.size.width, self.numberview.frame.size.height)];
                            UIGraphicsBeginImageContext(imageview.frame.size);
                            CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
                            CGContextSetStrokeColor(UIGraphicsGetCurrentContext(), red);
                            CGContextBeginPath(UIGraphicsGetCurrentContext());
                            CGContextMoveToPoint(UIGraphicsGetCurrentContext(), previouspoint.x, previouspoint.y);
                            CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0f);
                            CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentpoint.x,currentpoint.y);
                            CGContextClosePath(UIGraphicsGetCurrentContext());

                            previouspoint = currentpoint;


                        }
                        else
                        {
                            if(currentposition != imageview.tag)
                            {
                                isreverse = YES;
                            }
                            else
                            {
                                isreverse = NO;
                            }
                        }
                        break;
                    }
                }
            }
        }
        else
        {
            isended = YES;
            isoutofbound = YES;
            if(isbegan && isoutofbound)
                [self countinganswer];
        }
    }
}
else if(gestureRecognizer.state == UIGestureRecognizerStateEnded)
{
    if(!isoutofbound)
    {
        isended = YES;
        [self countinganswer];
    }
    else
        isoutofbound = NO;
}
}

我试图绘制一条线,但线条无法绘制。

有什么问题?并且可以给我一个示例项目吗?

1 个答案:

答案 0 :(得分:0)

问题是你正在绘制一个上下文,然后对它做任何事情而只是泄漏。在您绘制图形的中间,您需要通过UIGraphicsGetImageFromCurrentContext()从该上下文中获取图像。然后,您需要将该图像分配给图像视图。

或者(更现实地),您可以存储绘制的点,并在视图的drawRect:函数中绘制它们。

不,我没有适合您的示例项目。许多其他人已经完成了这个目标(包括我自己),我相信你也会这样做。如果您仍然遇到问题,您应该提出一个更具体的问题,而不是仅仅在此处转储所有代码并询问“为什么这不起作用?”

一个不相关的提示:如果你不希望你的同事对你愤怒,不要像你一样使用百万个嵌套if语句。这很丑陋,难以阅读......