2012-03-07 3 views
2

У меня есть подкласс UIView, и я хочу нарисовать CGPath из drawRect. Я слышал, что это так и невозможно. Я понимаю, что CGPath нуждается в контексте. Я попытался дать ему контекст с помощью newImage. Я также думаю, что я должен назвать это по-другому, например, мой код в CCLayer для вида, чтобы показать то, что было бы в DrawRectсоздать cgpath из drawRect

- (void)createPath:(CGPoint)origin 
{ 
CGSize size=CGSizeMake(320, 480); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
UIGraphicsBeginImageContextWithOptions(size,YES,1.0f); 
CGContextSaveGState(context); 

UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext(); 


CGRect newRect= CGRectMake(0, 0, 320, 480); 
CGMutablePathRef path1 = CGPathCreateMutable(); 

CGPathMoveToPoint(path1, nil,100, 200); 

CGPoint newloc = CGPointMake(300, 130); 

CGPathMoveToPoint(path1, NULL, newloc.x, newloc.y); 
CGPathAddLineToPoint(path1, NULL, newloc.x + 16,newloc.y + 38); 
CGPathAddLineToPoint(path1, NULL, newloc.x + 49, newloc.y + 0); 
CGPathAddLineToPoint(path1, NULL, newloc.x + 23, newloc.y - 39); 
CGPathAddLineToPoint(path1, NULL, newloc.x - 25,newloc.y - 40); 
CGPathAddLineToPoint(path1, NULL, newloc.x -43, newloc.y + 0); 
CGPathCloseSubpath(path1); 

CGContextAddPath(context, path1); 

CGContextSaveGState(context); 
CGContextSetLineWidth(context, 10.0); 
CGContextSetStrokeColorWithColor(context, [UIColor orangeColor].CGColor); 
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor); 
//Fill and stroke 
CGContextDrawPath(context, kCGPathFillStroke); 
//CGContextDrawImage(context, newRect, myImage.CGImage); 

UIGraphicsEndImageContext(); 
CGContextRestoreGState(context); 
CGPathRelease(path1); 
CGContextRelease(context); 

} 
+0

Вы хотите взять изображение из контекста, нарисованного путём? – cocoakomali

+0

Я просто хочу, чтобы CGPath выглядел как след. Я знаю, как это сделать, когда я делаю все в drawRect. Я не знаю, как нарисовать CGPath вне drawRect. Я знаю, что мне нужен контекст, и я подумал, что мне нужно сделать изображение, чтобы рисовать. – Asdrubal

ответ

0

Смотрите, если это поможет. У UIView с UIImageView, поскольку он подзаголовок. Затем реализовать метод прикасается, как показано ниже:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 

    //Get touch point 
    CGPoint currentPoint = [touch locationInView:drawImage]; 

    UIGraphicsBeginImageContext(self.frame.size); 

    //drawImage is the UIImageView 
    [drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; 

    //Line attributes 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 

    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 10.0); 

    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.5, 1.0, 1.0); 

    //Begin path 
    CGContextBeginPath(UIGraphicsGetCurrentContext()); 

    CGPathMoveToPoint(drawPath, NULL, lastPoint.x, lastPoint.y); 

    CGPathAddLineToPoint(drawPath, NULL, currentPoint.x, currentPoint.y); 

    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 

    drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 
} 

Теперь у вас есть UIImageView видно, что вы рисовали и drawPath будет иметь свой путь.

+0

Как сделать UIImageView? Какова точка метода drawInRect (ради знания)? – Asdrubal

+0

Я выяснил первую часть моего комментария (см. Выше). Однако я не уверен в общем решении. Вот что у меня есть ... Существует UIView. У меня есть CCLayer, где я добавляю UIView для его отображения. У меня есть метод createPath. Затем я создаю CGPath с помощью метода. Метод содержит ваш код. У меня ничего нет. Вы делаете CGPath в drawInRect? Второй вопрос. Будет ли метод, созданный вами в CCLayer или ViewController, и drawInRect будет методом в моем методе UIView? Не могли бы вы объяснить, где и почему вы используете код. Я очень тупой. – Asdrubal

+0

Этот код относится к классу UIView. Этот класс, в свою очередь, имеет подпрограмму UIImageView. Сенсорные методы используются для захвата пути. Я использую изображение, чтобы отобразить сделанные наброски. – cocoakomali