728x90
파일 생성
1. cocoa touch로 new file
2. extenstion 하려는 Subclass 선택 후 class명 작성
이렇게 하면 지정한 class명으로 .h와 .m 파일이 생성됨
// .h
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface 클래스명 : sub클래스
@end
NS_ASSUME_NONNULL_END
// .m
#import "클래스명.h"
@implementation CustomMarker
@end
UIView Extension 예제
- custom drawing imgae 생성 시
// .h
NS_ASSUME_NONNULL_BEGIN
@interface CustomImage : UIView
- (UIImage*) createImage;
@end
NS_ASSUME_NONNULL_END
// .m
#import "CustomImage.h"
#import "Util.h"
@implementation CustomImage
- (void)drawRect:(CGRect)rect {
// Drawing code
[self setBackgroundColor:[UIColor clearColor]];
}
- (UIImage*) createImage{
CGRect rects1 = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
UIGraphicsBeginImageContextWithOptions(rects1.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
수정할만한 소스
WWDC18에서 iOS10부터 UIGraphicsBeginImageContextWithOptions 대신 UIGraphicsImageRenderer사용을 권고하고 있다.
- (UIImage*) createImage {
UIGraphicsImageRendererFormat * format = [UIGraphicsImageRendererFormat defaultFormat];
UIGraphicsImageRenderer * renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(self.frame.size.width, self.frame.size.height) format:format];
UIImage * image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
[self.layer renderInContext:rendererContext.CGContext];
}];
return image;
}
- 사용
@interface ViewController () {
customImage * customImg;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
customImg = [[customImage alloc] initWithFrame: CGRectMake(0, 0, 40, 40)];
[customImg addSubview: 사용하려는 이미지뷰];
}
@end
728x90
'iOS > Objective-C' 카테고리의 다른 글
NotificationCenter(Observer) (0) | 2022.06.10 |
---|---|
integer 값 참조 오류 (0) | 2022.05.20 |
UIView에 그라데이션 적용하기 (0) | 2022.04.01 |
스트링 인터닝(String Interning) (0) | 2021.12.15 |
cornerRadius 원하는 부분에만 적용 (0) | 2021.12.15 |
댓글