2010-04-29 45 views
15

Sử dụng rất nhiều chức năng vẽ trong Cocoa hoặc Quartz, nó khá dễ dàng để vẽ đường dẫn, và điền chúng bằng cách sử dụng một gradient. Tuy nhiên, dường như tôi không thể tìm được cách chấp nhận được, để 'đột quỵ' vẽ một đường có chiều rộng đường kẻ là vài pixel và tô màu nét vẽ này bằng cách sử dụng gradient. Làm thế nào được thực hiện?Trên OSX, làm cách nào để tô đậm đường nét?

Chỉnh sửa: Rõ ràng câu hỏi chưa rõ ràng. Cảm ơn các phản ứng cho đến nay, nhưng tôi đã tìm ra điều đó. Những gì tôi muốn làm điều này là:

squares http://emle.nl/forumpics/misc/squares.png

Quảng trường trái là NSGradient rút ra trong một con đường tiếp theo là một thông điệp đột quỵ con đường. Quyền là điều tôi muốn làm; Tôi muốn điền vào các đột quỵ bằng cách sử dụng gradient.

Trả lời

20

Nếu bạn chuyển đổi các NSBezierPath đến một CGPath, bạn có thể sử dụng phương pháp CGContextReplacePathWithStrokedPath() để lấy một con đường đó là phác thảo của con đường vuốt ve. Graham Cox tuyệt vời GCDrawKit có phương thức danh mục -strokedPath trên NSBezierPath sẽ thực hiện việc này cho bạn mà không cần phải thả xuống Đồ họa cốt lõi.

Khi bạn có đường dẫn được phác thảo, bạn có thể điền đường dẫn đó với NSGradient.

+0

Tuyệt vời!Cảm ơn bạn :) Cảm ơn bạn đã liên kết đến drawkit, nó trông rất đẹp. – Emiel

+0

Tôi đã gặp vấn đề khi thực hiện công việc này - gradient của tôi lấp đầy toàn bộ khu vực bị cắt bớt, chứ không phải đường dẫn (có lẽ điều này cũng liên quan đến việc cắt bớt). Tôi đã vẽ một hình dạng đơn giản chỉ là đường viền của đường viền, cắt vào đường dẫn đó và sau đó sử dụng tô màu gradient, và nó hoạt động tốt nhất. – GoldenBoy

13

Tôi dường như không thể tìm được cách chấp nhận được, để 'đột quỵ' vẽ một đường có chiều rộng đường kẻ là vài pixel và tô màu nét vẽ này bằng gradient. Làm thế nào được thực hiện?

[câu trả lời gốc thay thế bằng sau]

Ah, tôi hiểu. Bạn muốn áp dụng gradient cho stroke.

Để làm điều đó, bạn sử dụng chế độ hòa trộn. Tôi đã giải thích cách thực hiện điều này trong câu trả lời trên another question. Dưới đây là danh sách các bước, phù hợp với mục tiêu của bạn:

  1. Bắt đầu một transparency layer.
  2. Đột quỵ đường dẫn với màu không trong suốt.
  3. Set the blend mode đến source in.
  4. Vẽ gradient.
  5. Kết thúc lớp trong suốt.
+0

Cảm ơn bạn đã trả lời. Tuy nhiên, không phải những gì tôi cố gắng đạt được. Tôi đã làm rõ câu hỏi một chút. – Emiel

+0

Emiel: Ah, tôi hiểu rồi. Tôi đã thay thế các nội dung trước đó của câu trả lời của tôi bằng một câu trả lời mới. –

8

Theo câu trả lời Peter Hosey của tôi đã quản lý để làm một đường cong dốc đơn giản, trông như thế này:

Gradient Curve Image

Tôi đã làm điều này trong drawRect (_ :) phương pháp của lớp UIView bởi viết mã bên dưới:

override func drawRect(rect: CGRect) { 
    let context = UIGraphicsGetCurrentContext() 

    CGContextBeginTransparencyLayer (context, nil) 
    let path = createCurvePath() 
    UIColor.blueColor().setStroke() 
    path.stroke() 
    CGContextSetBlendMode(context, .SourceIn) 

    let colors   = [UIColor.blueColor().CGColor, UIColor.redColor().CGColor] 
    let colorSpace  = CGColorSpaceCreateDeviceRGB() 
    let colorLocations :[CGFloat] = [0.0, 1.0] 
    let gradient  = CGGradientCreateWithColors(colorSpace, colors, colorLocations) 
    let startPoint  = CGPoint(x: 0.0, y: rect.size.height/2) 
    let endPoint  = CGPoint(x: rect.size.width, y: rect.size.height/2) 

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, CGGradientDrawingOptions.DrawsBeforeStartLocation) 
    CGContextEndTransparencyLayer(context) 
} 

Hàm createCurvePath() trả về đối tượng UIBezierPath. Tôi cũng đã đặt path.lineWidth thành 5 điểm.

+0

Bạn có biết nếu có thể làm cho đường dẫn có màu xanh lam ở đầu và đỏ ở cuối, nhưng f.e. uốn cong đường cong trở lại nơi nó bắt đầu? – Georg

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