По сути, я делаю представление с двумя изображениями. Изображение первое показано в правом треугольнике, занимающем верхний левый угол обзора, а изображение два занимает верхний правый треугольник, занимающий нижний правый угол.

Представьте себе квадрат, разрезанный по диагонали, в каждой полученной половине существует другое изображение.

Я много читал о масках, но я не хочу использовать другое изображение для маскировки этих изображений.

Я ищу способ дать ему 3 точки, которые образуют этот треугольник, а затем таким образом обрезать изображение.

Я чувствую, что это, наверное, легко сделать в Coregraphics, мне просто не хватает звонков, я думаю.

Любая помощь приветствуется!

0
JP. 26 Дек 2012 в 00:57

1 ответ

Лучший ответ

Вот один из способов - использовать обтравочные контуры в контексте изображения. Пример для изображения размером 256 x 256, но вы легко сможете адаптировать его к своим потребностям.

UIGraphicsBeginImageContext(CGSizeMake(256, 256));
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, 256); 
CGContextConcatCTM(context, flipVertical);
CGContextBeginPath(context);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 0, 256);
CGContextAddLineToPoint(context, 256, 256);
CGContextClosePath(context);
CGContextSaveGState(context);
CGContextClip(context);
CGContextDrawImage(context, CGRectMake(0, 0, 256, 256), [image1 CGImage]);
CGContextRestoreGState(context);
CGContextBeginPath(context);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 256, 0);
CGContextAddLineToPoint(context, 256, 256);
CGContextClosePath(context);
CGContextSaveGState(context);
CGContextClip(context);
CGContextDrawImage(context, CGRectMake(0, 0, 256, 256), [image2 CGImage]);
CGContextRestoreGState(context);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); // image contains the result
UIGraphicsEndImageContext();
2
Aky 26 Дек 2012 в 02:39