Я нашел "направляющие Путем" Obie Fernandez превосходный и часто относился к нему, когда Гибкая веб-разработка с направляющими, казалось, не заходила достаточно далеко. У Obie Fernandez есть достойное блог также.
Вам нужно сохранить набор клипов при рисовании изображения и вместо этого восстановить контекст. Также я не думаю, что вы хотите использовать композицию «in», а скорее «over», если вы просто хотите рисовать изображение в обычном режиме, не принимая во внимание прозрачность назначения. Попробуйте что-нибудь вроде:
[NSGraphicsContext saveGraphicsState];
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:imageFrame
xRadius:5
yRadius:5];
[path addClip];
[image drawInRect:imageFrame
fromRect:NSZeroRect
operation:NSCompositeSourceOver
fraction:1.0];
[NSGraphicsContext restoreGraphicsState];
Просто чтобы предоставить немного больше информации о том, что вы сделали неправильно:
Цель сохранения и восстановления gstate - иметь возможность отменить ваши изменения в gstate. В вашем случае восстановление gsave после обрезки отменило клип. Вот почему решение (как объяснил Рулт) состоит в том, чтобы нарисовать то, что вы хотите обрезать , прежде чем вы восстановите состояние gstate.