Có thể đột quỵ đường dẫn tùy ý với độ dốc hoặc bất kỳ hiệu ứng tô màu nào khác, chẳng hạn như mẫu.
Như bạn đã tìm thấy, đường dẫn vuốt ve không được hiển thị với độ dốc hiện tại. Chỉ các đường dẫn đầy mới sử dụng gradient (khi bạn chuyển chúng thành một clip và sau đó vẽ gradient).
Tuy nhiên, Core Graphics có một thủ tục ngạc nhiên mát mẻ CGContextReplacePathWithStrokedPath
rằng sẽ làm thay đổi đường dẫn mà bạn có ý định đột quỵ vào một con đường mà là tương đương khi điền.
Phía sau hậu trường, CGContextReplacePathWithStrokedPath
xây dựng một đa giác cạnh xung quanh đường dẫn đột quỵ và công tắc cho đường dẫn bạn đã xác định. Tôi dự đoán rằng công cụ dựng hình đồ họa lõi có thể thực hiện điều này dù sao trong các cuộc gọi đến CGContextStrokePath
.
Dưới đây là tài liệu hướng dẫn của Apple về vấn đề này:
thạch anh tạo ra một con đường vuốt sử dụng các thông số của bối cảnh đồ họa hiện nay. Đường dẫn mới được tạo để điền nó vẽ cùng một pixel như vuốt đường dẫn ban đầu. Bạn có thể sử dụng đường dẫn này giống như cách bạn sử dụng đường dẫn của bất kỳ ngữ cảnh nào. Ví dụ, bạn có thể clip vào phiên bản vuốt ve của một đường dẫn bằng cách gọi hàm này theo sau là một cuộc gọi đến hàm CGContextClip.
Vì vậy, chuyển đổi đường dẫn của bạn trong một cái gì đó bạn có thể điền, rẽ mà vào một clip, và sau đó vẽ gradient của bạn. Hiệu ứng sẽ như thể bạn đã vuốt ve đường dẫn với gradient.
Mã
Nó sẽ giống như thế này ...
// Get the current graphics context.
//
const CGContextRef context = UIGraphicsGetCurrentContext();
// Define your stroked path.
//
// You can set up **anything** you like here.
//
CGContextAddRect(context, yourRectToStrokeWithAGradient);
// Set up any stroking parameters like line.
//
// I'm setting width. You could also set up a dashed stroke
// pattern, or whatever you like.
//
CGContextSetLineWidth(context, 1);
// Use the magical call.
//
// It turns your _stroked_ path in to a **fillable** one.
//
CGContextReplacePathWithStrokedPath(context);
// Use the current _fillable_ path in to define a clipping region.
//
CGContextClip(context);
// Draw the gradient.
//
// The gradient will be clipped to your original path.
// You could use other fill effects like patterns here.
//
CGContextDrawLinearGradient(
context,
yourGradient,
gradientTop,
gradientBottom,
0
);
Tiếp tục ghi chú
Đó là giá trị nhấn mạnh một phần của tài liệu trên:
thạch anh tạo ra một con đường vuốt ve sử dụng các thông số ngữ cảnh đồ họa hiện tại.
Thông số hiển thị là chiều rộng đường kẻ. Tuy nhiên, tất cả trạng thái bản vẽ dòng được sử dụng, chẳng hạn như mẫu nét vẽ, giới hạn bộ giới hạn, kết nối đường thẳng, mũ, mẫu dấu gạch ngang, v.v. Điều này làm cho phương pháp tiếp cận cực kỳ mạnh mẽ.
Để biết thêm chi tiết, hãy xem this answer trong số this S.O. question.
Lưu ý nhanh - câu trả lời hiện được chọn ở đây không chính xác. ** Có thể đột quỵ đường dẫn tùy ý với một gradient ** như [câu trả lời này] (http://stackoverflow.com/a/25034854/2547229) cho thấy. – Benjohn