2013-10-02 13 views
8

Tôi đang tạo trình chỉnh sửa hình ảnh có thể tạo các đối tượng hình dạng khác nhau như hình tròn, hình tam giác và hình vuông cũng có thể được cập nhật hoặc xóa. Vì vậy, tôi đã sử dụng CAShapeLayer để tạo các đối tượng hình dạng.Vẽ một đường bằng Bezierpath sử dụng đối tượng CAShapeLayer

Bây giờ tôi cũng muốn vẽ một đường trên hình ảnh cũng có thể được cập nhật hoặc xóa vì vậy tôi đã sử dụng bezierpath và CAShapeLayer để tạo dòng, nó hoạt động tốt. NHƯNG bây giờ vấn đề là khi tôi muốn chọn bất kỳ dòng hiện có nó có thể được chọn bất kỳ nơi gần với công cụ dòng vì CAShapeLayer cũng thiết lập các khu vực điền đó sẽ là một đường thẳng từ điểm bắt đầu đến điểm kết thúc.

Câu hỏi của tôi là làm cách nào tôi có thể tạo dòng không có vùng điền bằng cách sử dụng CAShapeLayer.

Đây là mã của tôi để tạo dòng:

CAShapeLayer *line = [CAShapeLayer layer]; 
// Using bezierpath to make line 
UIBezierPath *linePath=[UIBezierPath bezierPath]; 

// Creating L with line 

[linePath moveToPoint:point1]; 
[linePath addToPoint:point2]; 
[linePath addToPoint:point3]; 
line.path=linePath.CGPath; 


// Configure the appearence of the line 
line.fillColor = Nil; 
line.opacity = 1.0; 
line.strokeColor = [UIColor whiteColor].CGColor; 

Bất kỳ ý tưởng về vấn đề này sẽ được thực sự đánh giá cao.

+0

Nó hoạt động. Có lẽ bạn đã quên thêm layer '' '[self.view.layer addSublayer: line];' '' – Shmidt

+0

Tôi đã thêm dòng này nữa, nó tạo ra dòng tiền phạt nhưng nó cũng điền vào vùng từ điểm bắt đầu đến điểm kết thúc và xem xét nó như một phần của lớp. Vì vậy, vấn đề là bất cứ khi nào tôi cố gắng khai thác gần dòng dòng được chọn. –

+0

Nếu bạn đang sử dụng '[linePath addLineToPoint: point2]'? –

Trả lời

3

Bạn có thể thử điều này không. công việc của mình cho tôi

CAShapeLayer *line = [CAShapeLayer layer]; 
    UIBezierPath *linePath=[UIBezierPath bezierPath]; 
    [linePath moveToPoint:CGPointMake(startx, starty)]; 
    [linePath addLineToPoint:CGPointMake(endx, endy)]; 
    line.lineWidth = 10.0; 
    line.path=linePath.CGPath; 
    line.fillColor = shapecolor.CGColor; 
    line.strokeColor = shapecolor.CGColor; 
    [[self.view layer] addSublayer:line]; 
+0

chắc chắn sẽ kiểm tra và cho bạn biết. –

+0

là bạn không bỏ lỡ [linePath stroke]? –

+0

Bạn không cần '[linePath stroke]' ở đây, và trên thực tế, bạn có thể sẽ gặp lỗi ngữ cảnh nếu bạn làm (trừ khi bạn bắt đầu một ngữ cảnh hoặc sử dụng nó trong 'drawRect') - gọi 'stroke' sử dụng Core Đồ họa, nhưng ngay tại đây chúng tôi muốn sử dụng Core Animation. – DMan

0

Tôi hiểu bạn tôi có kinh nghiệm vấn đề này cũng cố gắng này:

GPathRef linePathRef = linePath.CGPath 
linePathRef = CGPathCreateCopyByStrokingPath(linePathRef, NULL, line.lineWidth, kCGLineCapRound, kCGLineJoinRound, 1); 
BOOL pathContainsPoint = CGPathContainsPoint(linePathRef, NULL, touchLocation, NO); 

if(pathContainsPoint){ 
    //Do something with the cashapelayer line... 
}else{ 
    //Do something here if needed... 
} 
Các vấn đề liên quan