2011-10-20 25 views
5

Tôi có một tập hợp các chế độ xem trong băng chuyền, mỗi chế độ xem sử dụng CAGradientLayer làm nền. Băng chuyền ngồi trên nền kết cấu. Tôi đã được yêu cầu nền để poke lên trong một hình tam giác để hiển thị xem được chọn. Tôi không thể chỉ sử dụng một hình ảnh tam giác với kết cấu nền, vì nó sẽ không nhất thiết phải phù hợp với nền chính. Tôi muốn cắt một đường ra khỏi nền của khung nhìn hiện tại, sao cho nền kết cấu có thể nhìn thấy được thông qua điểm nhấn.Làm thế nào để cắt một notch ra khỏi một CALayer?

Tôi nên làm như thế nào? Có thể tạo một lớp đa giác không?

Trả lời

10

tôi thấy tôi đã có thể làm điều đó bằng cách sử dụng CAShapeLayer:

CAShapeLayer *mask = [[[CAShapeLayer alloc] init] autorelease]; 
mask.frame = backgroundLayer.bounds; 
mask.fillColor = [[UIColor blackColor] CGColor]; 

CGFloat width = backgroundLayer.frame.size.width; 
CGFloat height = backgroundLayer.frame.size.height; 

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, nil, 0, 0); 
CGPathAddLineToPoint(path, nil, width, 0); 
CGPathAddLineToPoint(path, nil, width, height); 
CGPathAddLineToPoint(path, nil, (width/2) + 5, height); 
CGPathAddLineToPoint(path, nil, width/2, height - 5); 
CGPathAddLineToPoint(path, nil, (width/2) - 5, height); 
CGPathAddLineToPoint(path, nil, 0, height); 
CGPathAddLineToPoint(path, nil, 0, 0); 
CGPathCloseSubpath(path); 

mask.path = path; 
CGPathRelease(path); 

backgroundLayer.mask = mask; 
-3

Có thể tạo lớp đa giác không?

số

Làm thế nào tôi nên đi về điều này?

Sử dụng mặt nạ - hình ảnh png có cùng kích thước với lớp của bạn nhưng bị cắt một chút - điều này sẽ khiến cho CALayer xuất hiện để cắt một đoạn. (Tuy nhiên, nó sẽ không như vậy nếu bạn cắt ra là lớn, bạn có thể có được người dùng cố gắng chạm vào bất cứ điều gì đằng sau nó, mà sẽ không hoạt động!).

Xem documentation (và tìm kiếm stackoverflow) để biết thêm chi tiết.

+0

tôi có thể không thực sự sử dụng một mặt nạ PNG - xem là động cỡ. – Simon

+0

Làm cho mặt nạ của bạn tự động sử dụng các API vẽ Quartz - http://www.codeproject.com/KB/iPhone/iOSGetStarted01.aspx – deanWombourne

+0

Đây thực sự là một câu trả lời hợp pháp, vì lớp luôn luôn là một hình chữ nhật (tài liệu của Apple), vì vậy một hình ảnh .png là một giải pháp khả thi. –

0

Tôi không nghĩ rằng chúng tôi có thể vẽ các lớp đa giác. Tuy nhiên, tôi tin rằng các kết quả dự kiến ​​có thể đạt được bằng hai cách khác nhau: -

  1. Nếu hình ảnh của bạn là có cùng kích thước thì bạn có thể sử dụng một hình ảnh PNG với notch trong suốt ở giữa (hoặc bên ngoài theo của bạn khao khát).

  2. Vẽ hình chữ nhật đầy và hình đa giác trong suốt. Sau đó, bạn cần phải cắt nhau cả hình đa giác (hình chữ nhật và hình tam giác). Hình dạng kết quả sẽ được đặt trên hình ảnh băng chuyền. Lợi ích của phương pháp này là bạn có thể tự động thay đổi kích thước và hình dạng của đa giác nếu được yêu cầu.

Hy vọng điều này sẽ hữu ích!

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