2010-08-21 2 views
1

Im пытается нарисовать линию.Нарисуйте линию в iPhone, Исключение

Я написал код, как показано ниже.

UIColor *currentColor = [UIColor blackColor]; 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0); 
CGContextSetStrokeColorWithColor(context, currentColor.CGColor); 
CGContextMoveToPoint(context, startingPoint.x, startingPoint.y); 
CGContextAddLineToPoint(context,endingPoint.x , endingPoint.y); 
CGContextStrokePath(context); 

, но это показывает исключение следующим

Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetLineWidth: invalid context 0x0 
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0 
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextMoveToPoint: invalid context 0x0 
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextAddLineToPoint: invalid context 0x0 
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextDrawPath: invalid context 0x0 
+0

Вы на самом деле не имеют графический контекст. Вы делаете это внутри drawRect: или какое-то другое случайное место? –

+0

im использовать его в моей собственной функции с именем drawLine: (CGPoint) От: (CGPoint) до –

+0

должен включать любую фреймворк или какой-нибудь файл для рисования? –

ответ

4

Вы также должны позвонить CGContextBeginPath(ctx); только перед вызовом CGContextMoveToPoint

- (void) drawRect: (CGRect) rect 
{ 
    UIColor *currentColor = [UIColor blackColor]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, 2.0); 
    CGContextSetStrokeColorWithColor(context, currentColor.CGColor); 
    CGContextBeginPath(context); // <---- this 
    CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y); 
    CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y); 
    CGContextStrokePath(context); 
} 
+0

Вам также нужно использовать 'CGContextClosePath' –

2

Вы не имеют действительный графический контекст. UIGraphicsGetCurrentContext() очевидно возвращен nil.

Место, куда вы хотите обратить внимание?

Если вы хотите привлечь к экрану, то вы должны реализовать drawRect: метод UIView или одного из его подклассов и есть IOS вызывать этот метод (путем инициирования обновления в части экрана). Тогда у вас будет действительный графический контекст во время выполнения drawRect:.

Если вы хотите нарисовать карту внеэкранного пикселя, вам нужно создать графический контекст самостоятельно с помощью UIGraphicsBeginImageContext или аналогичной функции.

EDIT:

Таким образом, для рисования в UIView, вам нужно создать UIView подкласс и переопределить DrawRect:

@interfaceMyView : UIView { 
} 

@end 


@implementation MyUIView 

- (void) drawRect: (CGRect) rect 
{ 
    UIColor *currentColor = [UIColor blackColor]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, 2.0); 
    CGContextSetStrokeColorWithColor(context, currentColor.CGColor); 
    CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y); 
    CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y); 
    CGContextStrokePath(context); 
} 

Затем открыть файл XIB (что у вас, вероятно, уже есть = в интерфейсе Builder, добавьте UIView и выберите MyUIView как класс (первое поле на последней вкладке окна «Инспектор»).

+0

Можете привести небольшой пример. –

+0

Я могу привести вам пример, если вы ответите, куда хотите нарисовать. – Codo

+0

Я хочу нарисовать линию в UIView –