2011-01-24 30 views
8

Tôi muốn phát triển một ứng dụng khi người dùng có thể vẽ đường ... nhưng tôi không muốn vẽ đường thẳng nhưng muốn hiển thị đường kẻ khi người dùng vẽ nó. Khi người dùng nhận được từ điểm A đến B, tôi muốn thẳng hàng (nếu người dùng muốn điều này).Vẽ một đường trong iPhone/iPad

Để có thể thực hiện việc này, tôi muốn thay đổi chế độ xem thành lưới bắt đầu từ 0,0 (trên cùng bên trái) và kết thúc ở 320,480 (đối với iPhone) và 768,1024 (dành cho iPad) (dưới cùng bên phải).

Đối với câu hỏi này, tôi có điểm A ở 10,10 và điểm B ở 100,100.

Câu hỏi của tôi:
- Làm cách nào để tạo lưới này?
- Làm cách nào để tạo các điểm này?
- Làm thế nào để vẽ đường này mà không làm thẳng nó?
- Làm cách nào để vẽ đường thẳng?

Vấn đề của tôi là tôi quen với việc tạo ứng dụng giao diện người dùng "bình thường". Tôi không quen thuộc với Open-GL ect.

Tôi hy vọng ai đó có thể giúp tôi với điều này.

Trân trọng,
Paul Peelen

+0

Tôi khuyên bạn nên giải quyết vấn đề "thẳng" của mình thành một câu hỏi riêng. – genpfault

+0

Ok, bạn có nghĩa là tôi bắt đầu với các đường thẳng như bước 1 và sau đó chuyển sang các dòng thẳng trong bước 2? –

+0

Bạn đã gắn thẻ tên này là 'opengl-es' - bạn đang vẽ bản vẽ của mình với nó hay với hệ thống bản vẽ" gốc ", Quartz? –

Trả lời

17

Bạn phân lớp UIView của bạn và ghi đè lên các phương pháp - (void)drawRect:(CGRect)rect.

Trong đó bạn lấy một bối cảnh đồ họa:

CGContextRef context = UIGraphicsGetCurrentContext(); 

Và bạn sử dụng để làm cho lõi đồ họa gọi, như:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextBeginPath (context); 
for (k = 0; k < count; k += 2) { 
    CGContextMoveToPoint(context, s[k].x, s[k].y); 
    CGContextAddLineToPoint(context, s[k+1].x, s[k+1].y); 
} 
CGContextStrokePath(context); 

Tra cứu Hướng dẫn Lập trình Quartz 2D cho tất cả các chi tiết.

+0

Tuyệt vời, tôi sẽ có một cái nhìn. –

+0

Tôi bắt đầu với cùng một điều ,, bất kỳ ví dụ hoặc hướng dẫn ... không thể tìm ra cách sử dụng mã này .. Bất kỳ trợ giúp đánh giá cao cảm ơn – Dave

+0

Bất kỳ ai giúp tôi làm thế nào để sử dụng mã trên? –

0

Bạn có thể kéo đường thẳng khi người dùng kéo nó dựa trên bắt đầu và điểm kết thúc vẽ một đường sử dụng UIBezierPath và CAShapeLayer:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    startingPoint = [touch locationInView:baseHolderView]; 

} 
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    endingPoint = [touch locationInView:baseHolderView]; 
    [self makeLineLayer:baseHolderView.layer lineFromPointA:startingPoint toPointB:endingPoint]; 
} 

-(void)makeLineLayer:(CALayer *)layer lineFromPointA:(CGPoint)pointA toPointB:(CGPoint)pointB 
{ 
    CAShapeLayer *line = [CAShapeLayer layer]; 
    UIBezierPath *linePath=[UIBezierPath bezierPath]; 
    [linePath moveToPoint: pointA]; 
    [linePath addLineToPoint:pointB]; 
    line.path=linePath.CGPath; 
    line.fillColor = nil; 
    line.opacity = 2.0; 
    line.strokeColor = [UIColor blackColor].CGColor; 
    [layer addSublayer:line]; 
} 

Hy vọng điều này sẽ giúp đạt được mục tiêu của bạn.

Các vấn đề liên quan