你能把图片放在UIImageView 吗?如果是这样:
创建一个新的CAShapeLayer(记得导入QuartzCore!)。创建一个六边形的CGPathRef 或UIBezierPath,并将其设置为形状图层的path 属性。将你的形状层设置为图像视图层的mask。
如果您想修改UIImage 本身,您可能需要添加一个类似- (UIImage)hexagonImage 的类别方法,它将图像绘制到一个CGGraphicsContext 中,使用CGContextClipPath 被您的六边形路径剪切,然后返回从图形上下文创建的UIImage。
编辑:这里是代码示例
(注意:我在构建答案时有点忘乎所以,除了一些用于生成UIBezierPathn-gon 的代码之外,您还可以看到下面提到的两种技术,在ZEPolygon的示例项目中)
方法一:用CAShapeLayer屏蔽图像视图
UIImageView *maskedImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
// insert your code for generating a hexagon here, or use mine from ZEPolygon
UIBezierPath *nonagon = [UIBezierPath bezierPathWithPolygonInRect:maskedImageView.frame numberOfSides:9];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = nonagon.CGPath;
maskedImageView.layer.mask = shapeLayer;
[self.view addSubview:maskedImageView];
方法 2:UIImage 上的类别以返回屏蔽版本
在UIImage+PolygonMasking.h:
#import <UIKit/UIKit.h>
@interface UIImage (ABCPolygonMasking)
- (UIImage *)abc_imageMaskedWithPolygonWithNumberOfSides:(NSUInteger)numberOfSides;
@end
在UIImage+PolygonMasking.m:
#import "UIImage+PolygonMasking.h"
#import "UIBezierPath+ZEPolygon.h"
@implementation UIImage (ABCPolygonMasking)
- (UIImage *)abc_imageMaskedWithPolygonWithNumberOfSides:(NSUInteger)numberOfSides
{
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
CGContextRef ctx = UIGraphicsGetCurrentContext();
// insert your code for generating a hexagon here, or use mine from ZEPolygon
UIBezierPath *path = [UIBezierPath bezierPathWithPolygonInRect:CGRectMake(0, 0, self.size.width, self.size.height)
numberOfSides:numberOfSides];
CGContextSaveGState(ctx);
[path addClip];
[self drawAtPoint:CGPointMake(0, 0)];
CGContextRestoreGState(ctx);
UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return retImage;
}
@end