이미지를 UIImageView
에 넣을 수 있습니까? 일치하는 경우 :
CAShapeLayer
을 새로 만듭니다 (QuartzCore를 가져 오십시오!). 육각형 모양의 CGPathRef
또는 UIBezierPath
을 만들고 모양 레이어의 path
속성으로 설정합니다. 모양 레이어를 이미지보기 레이어의 mask
으로 설정합니다.
당신이 UIImage
자체를 수정하려면, 당신은 아마 다음 CGContextClipPath
를 사용하고 육각 경로 클리핑하는 CGGraphicsContext
에 이미지를 그립니다 - (UIImage)hexagonImage
같은 카테고리의 방법을 추가 할 것입니다 그래픽에서 만든 UIImage
을 반환 문맥.
편집 : 여기에 코드 샘플은
(참고 : 나는 내 대답을 건설에 도취 조금을 가지고, 당신은 UIBezierPath
를 생성하는 몇 가지 코드 이외에, 아래에 언급 된 기술을 모두 볼 수 있습니다 N -gon, ZEPolygon에서 샘플 프로젝트)
방법 1 : 마스크 이미지보기 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];
,617,
방법 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
그냥 해명. 여기 '자르기'란 뜻은 무엇입니까? 결과 이미지는 이전처럼 경계를 유지하므로 육각형 외부의 이미지 데이터에 어떤 일이 일어나기를 원합니 까? 투명하게 만들고 결과 이미지를 디스크에 저장하지 않으시겠습니까? 육각형으로 가려진 부분없이 이미지를 직접 그릴 수 있습니까? – schmubob
위의 수정! –