2009-11-01 33 views
6

Tôi đang cố gắng sử dụng hình ảnh lõi trên iphone. Tôi có thể kết hợp màu của tôi bằng cách sử dụng thạch anh để vẽ uiview, nhưng tôi muốn tách riêng từng thành phần thành CALayer (UIview tiêu thụ nhiều tài nguyên hơn).màu tổng hợp: Chế độ hòa trộn và chế độ hòa trộn trên iPhone

Vì vậy, tôi có một mặt nạ màu trắng tôi muốn sử dụng để lọc bitmap nền và tôi muốn thử chế độ hòa trộn khác nhau. Thật không may, các lớp chỉ "thêm" màu sắc của chúng.

Đây là mã của tôi:

@implementation WhiteLayerHelper 

    - (void)drawLayer:(CALayer *)theLayer 
      inContext:(CGContextRef)myContext 
    { 
     // draw a white overlay, with special blending and alpha values, so that the saturation can be animated 
     CGContextSetBlendMode(myContext,kCGBlendModeSaturation); 
     CGContextSetRGBFillColor(myContext,1.0,1.0,1.0,0.9); 
     CGContextFillRect(myContext,[UIScreen mainScreen].bounds); 

    } 

@end 

Và đây là chính xem drawrect mã, nơi tôi sử dụng CALayer tôi:

- (void)drawRect:(CGRect)rect { 
    //get the drawing context 
    CGContextRef myContext = UIGraphicsGetCurrentContext(); 
    // draw the background 
    [self fillContext:myContext withBounds:m_overlayRect withImage:m_currentImage]; 
    [whiteLayer renderInContext:myContext]; 

} 

Có điều gì sai?

Trả lời

1

Không hề ... Tôi nghĩ điều này dễ sử dụng hơn để đạt được điều này, bởi vì nó có vẻ chưa được triển khai trong CA.

3

Phương pháp này có vẻ không phải là một lỗ hổng của Hoạt ảnh cốt lõi, bởi vì các lớp được hiển thị trước trong ngữ cảnh hình ảnh. Core Image được sử dụng để lọc thời gian thực (trong khi hoạt ảnh và không có) của những hình ảnh này đối với các lớp nền và hình ảnh của chúng. Vì vậy, các tính chất tổng hợp của CALayer được sử dụng cho khả năng này, mà không có sẵn trên iPhone/iOS (chưa) do yêu cầu của Core Image.

OpenGL có thể làm điều này cho chúng ta trong tình hình của chúng tôi, tuy nhiên =)

chỉnh sửa (thêm): thiết lập chế độ hòa trộn với CGContext trong -drawInContext: và -drawLayer: InContext: không tất nhiên vẫn có hiệu lực thi hành với những gì đã được trả lại hoặc hiện diện trong hình ảnh của bối cảnh đó. (khi nó được thiết lập trước khi bất cứ điều gì được hiển thị trong bối cảnh (hình ảnh của), đó là hiệu ứng của việc pha trộn với màu đen hoặc trắng đầy đủ (tôi không chắc chắn =)

+1

CoreImage hiện không có sẵn trên iOS? – openfrog

+1

@openfrog có nhưng nó bị giới hạn so với OS X. ví dụ trên OS X CALayers có thể có tổng hợp filte rs. Trên iOS, không quá nhiều. –

7

Tôi quản lý để có được ảnh hưởng của . compositing nhiều CALayers bằng cách vẽ chúng trực tiếp vào bối cảnh đồ họa của một UIView

-(void)drawRect:(CGRect)rect { 
CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextSetBlendMode(c, kCGBlendModeDifference); 
[myLayer drawInContext:c]; 
} 

BTW, tôi không thêm các lớp như lớp con của lớp của view (có nghĩa là tôi không bao giờ được gọi là [myView.layer addSublayer: myLayer])

+5

nếu bạn không thực hiện chức năng ủy nhiệm calayer "- (void) drawLayer: (CALayer *) lớp inContext: (CGContextRef) context", bạn nên sử dụng [mylayer renderInContext: c] – jkr

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