2010-06-23 22 views
5

Tôi đang cố vẽ hình phản chiếu của hình dạng bằng cách sử dụng Cocoa. Tôi đã áp dụng một NSAffineTransform và vẽ lại hình dạng thành công, nhưng bây giờ tôi không thể tìm ra cách vẽ một mặt nạ alpha trên nó. Tôi đang sử dụng một hoạt động NSCompositeDestinationOut, nhưng nó đem lại cho tôi một kết quả không mong muốn: alt text http://img687.imageshack.us/img687/2417/capturedcran20100623094.pngCa cao: Sử dụng NSGradient làm mặt nạ để vẽ bên dưới nó

Tôi không chắc chắn chính xác làm thế nào để khắc phục điều này - tôi cần phải làm cho nó nên gradient hoạt động chỉ như là một mặt nạ alpha và không phải là thực sự được hiển thị. Tôi có sử dụng chế độ ghép sai không?

Cảm ơn! Dưới đây là mã gradient nếu cần:

- (void)fadeOutRect:(NSRect)rect { 
    [NSGraphicsContext saveGraphicsState]; 
    [[NSGraphicsContext currentContext] setCompositingOperation:NSCompositeDestinationOut]; 

    NSGradient *gradient = [[NSGradient alloc] initWithColorsAndLocations: 
          [[NSColor blackColor] colorWithAlphaComponent:0.5], 0.0, 
          [[NSColor blackColor] colorWithAlphaComponent:1.0], 0.8, nil]; 
    [gradient drawInRect:NSMakeRect(rect.origin.x, rect.origin.y + rect.size.height - (PILL_HEIGHT * 2), 
            rect.size.width, PILL_HEIGHT) angle:270]; 

    [NSGraphicsContext restoreGraphicsState]; 
} 
+0

Bạn cần tạo hình ảnh mặt nạ, kết hợp với hình ảnh nguồn của bạn, sau đó vẽ hình ảnh kết quả. http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html – hooleyhoop

+0

Nhưng đối tượng tôi đang che mặt không phải là hình ảnh, nó là một điều khiển được vẽ động. Có cách nào tôi có thể làm cho nó để vẽ một hình ảnh và sử dụng nó? –

Trả lời

2

Đúng. Dưới đây là ví dụ về mã mà chúng tôi sử dụng để thực hiện việc này. Nó sử dụng một hình ảnh nguồn, và có một chút kinh doanh hài hước với một yếu tố quy mô, nhưng bạn sẽ có thể sử dụng cấu trúc cơ bản và sự lựa chọn tổng hợp để làm những gì bạn cần. (Mã này nằm trong khối [reflectionImage lockFocus], và bản thân là NSImage mà chúng tôi đang tạo ra sự phản chiếu.)

// Draw our mask into the image 
NSGradient* fade = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.5] 
               endingColor:[NSColor clearColor]]; 
[fade drawFromPoint:NSMakePoint(0.0, size.height) 
      toPoint:NSMakePoint(0.0, 0.0) 
      options:0]; 

// Composite the original image, upside-down 
NSAffineTransform* flipper = [NSAffineTransform transform]; 
[flipper scaleXBy:1.0 yBy:-1.0]; 
[flipper concat]; 
[self drawInRect:NSMakeRect(0.0, -1.0*size.height, size.width, size.height) 
     fromRect:NSMakeRect(0.0, 0.0, self.size.width, size.height/scaleFactor) 
     operation:NSCompositeSourceIn fraction:1.0]; 
+0

Được rồi, bây giờ tôi đang vẽ hình dạng thành một NSImage và tổng hợp nó bằng cách sử dụng phương pháp bạn đã cho thấy, nhưng tất cả những gì được hiển thị là một hộp đen. –

+0

Bạn sẽ cần phải cụ thể hơn - như trong, đăng mã của bạn - về chính xác bạn đang làm gì. Tôi đảm bảo với bạn rằng mã này hoạt động, vì nó được sử dụng trong một ứng dụng sản xuất và đang hoạt động tốt, vì vậy không có gì chúng tôi thực sự có thể làm để giúp bạn dựa trên xác nhận rằng nó không hoạt động. : - / – bdrister