2015-12-21 31 views
7

Tôi đã tạo CAGradientLayer có ba màu, tôi cần phải cung cấp cho mỗi vị trí màu khác nhau. Ví dụ:Cách đặt "vị trí" cho CAGradientLayer

Red = 0 to 50 % 
Yellow = 51 to 80 % 
Green = 81 to 100 % 

Tôi đã thử với cho startPointendPoint nhưng nó đã không làm việc. enter image description here

+0

nơi bạn đang đấu tranh chính xác? Lớp này có hai thuộc tính 'colors' và' locations' sẽ được sử dụng cho bạn. Ngôn ngữ gì btw? – luk2302

+0

"Ví dụ" của bạn không rõ ràng, giải thích chính xác 0% -50%, 51% -80% và 81% -100% có nghĩa là gì và thêm mã bạn đã sử dụng để ai đó có thể cho bạn thấy sự cố là trích dẫn tài liệu. –

+0

Màu sắc trên lớp gradient nên như vậy và tỷ lệ phần trăm như vậy, theo mặc định tất cả ba màu sẽ phân phối đồng đều mà tôi muốn thay đổi. Tôi đang sử dụng Objective-C. Cảm ơn bạn. –

Trả lời

16

Nếu bạn đặt các đoạn mã sau vào một sân chơi bạn sẽ nhận được đầu ra mong muốn chính xác:

let view = UIView(frame: CGRectMake(0,0,200,100)) 

let layer = CAGradientLayer() 
layer.frame = view.frame 
layer.colors = [UIColor.greenColor().CGColor, UIColor.yellowColor().CGColor, UIColor.redColor().CGColor] 
layer.locations = [0.0, 0.8, 1.0] 

view.layer.addSublayer(layer) 

XCPShowView("ident", view: view) 

xuất ra:

enter image description here

Bạn chỉ cần xác định các màu sắc như một mảng của CGColors và một mảng có cùng kích thước là NSNumber s trong khoảng từ 0,0 đến 1,0.

Dont sử dụng startPointendPoint cho rằng - họ là để xác định từ nơi đến nơi gradient được hiển thị trong lớp - nó không có bất cứ điều gì để làm với phần trăm và màu sắc, vv


Phiên bản Swift3 gần đây hơn của mã:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 100)) 
let layer = CAGradientLayer() 
layer.frame = view.frame 
layer.colors = [UIColor.green.cgColor, UIColor.yellow.cgColor, UIColor.red.cgColor] 
layer.locations = [0.0, 0.8, 1.0] 
view.layer.addSublayer(layer) 
PlaygroundPage.current.liveView = view 
+0

Cảm ơn bạn, nó đã giải quyết được vấn đề của tôi. –

+1

@ luk Điều gì xảy ra nếu tôi muốn một gradient nằm ngang sử dụng mảng vị trí? – abhi1992

+1

Cảm ơn bạn đã phát lại @ luk2302, Chúng tôi có thể sử dụng điểm bắt đầu, điểm cuối và vị trí cùng nhau để tạo ra độ dốc ngang. – abhi1992

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