У меня есть NSView, который отображает изображение, и я хотел бы, чтобы этот вид действовал как эффект обрезанного изображения. Тогда я сделать 3 прямоугольников (imageRect
, secRect
и IntersectRect
), то imageRect
является прямоугольник, который показывает изображение, secRect
это прямоугольник, который просто действовать, чтобы затемнить весь imageRect
и intersectRect
является прямоугольником, который, как наблюдать прямоугольник, то, что я хочу сделать, как сделать «дыру» на secRect
, чтобы увидеть прямо в imageRect
(без темного). вот мой метод DrawRect:Использование операции NSImage для создания эффекта обрезки
- (void)drawRect:(NSRect)rect {
// Drawing code here.
NSImage *image = [NSImage imageNamed:@"Lonely_Tree_by_sican.jpg"];
NSRect imageRect = [self bounds];
[image compositeToPoint:NSZeroPoint operation:NSCompositeSourceOver ];
if (NSIntersectsRect([myDrawRect currentRect], [self bounds])) {
//get the intersectionRect
intersectionRect = NSIntersectionRect([myDrawRect currentRect], imageRect);
//draw the imageRect
[image compositeToPoint:imageRect.origin operation:NSCompositeSourceOver];
//draw the secRect and fill it with black and alpha 0.5
NSRect secRect = NSMakeRect(imageRect.origin.x, imageRect.origin.y, imageRect.size.width, imageRect.size.height);
[[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.5] set];
[NSBezierPath fillRect:secRect];
//have no idea for the intersectRect
/*[image compositeToPoint:intersectionRect.origin
fromRect:secLayer
operation:NSCompositeXOR
fraction:1.0];*/
}
//draw the rectangle
[myDrawRect beginDrawing];
}
У меня есть свой класс (myDrawRect), чтобы нарисовать прямоугольник, основанный на мыши на [self bounds]
, так что просто игнорировать команду beginDrawing
.
Любая помощь будет в порядке, спасибо. Хебб.